我想获取相关的对象引用,并且我想使用自定义管理器。
外面有什么东西吗?我如何使用自定义管理器来获取这些对象?
b.entry_set.all()
Run Code Online (Sandbox Code Playgroud)
例如
b.custom_manager.entry_set.all()
b.entry_custom_manager_set.all()
Run Code Online (Sandbox Code Playgroud) annotate() 使事情变得缓慢如爬行一样正常吗?
使用这样的注释:
post_list = j.post_set.all().annotate(num_comments=Count('comment')).order_by('-pub_date')
Run Code Online (Sandbox Code Playgroud)
与不做注释相比,花费的时间是原来的四倍:
post_list = j.post_set.all().order_by('-pub_date')
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 value() 和 defer() ,但这些也没有帮助。将评论数量保留为 Post 表中的字段是唯一真正的选择吗?
顺便说一句,我正在使用MySQL。
我有一个模型,我想使用 choice= 选项,但深度为三层。
class Doctor(models.Model):
...
zipcode = models.CharField(max_length=10, choices=AREAS, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
在管理员的“邮政编码”下拉列表中,我希望层次结构为:
Bronx
--Kingsbridge
----10463
----10471
--Fordham
----10458
----10467
----10468
Brooklyn
--Borough Park
----11204
etc.
Run Code Online (Sandbox Code Playgroud)
然后,如果我选择邮政编码 10463,Doctor 对象将与布朗克斯区的 Kingsbridge 区域关联。我正在尝试各种不同的方法。我最接近的是使用这个:
AREAS = (
('Bronx', (('Kingsbridge', ('10463', '10463'),),)),
...
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给了我这样的层次结构:
Bronx
--('10463', '10463')
Run Code Online (Sandbox Code Playgroud)
这很奇怪而且没有帮助。有人能看出我哪里出错了吗?这种层次结构可能吗?在应用程序中创建另一个名为 Areas 的表并使用多位字段会更明智吗?我想得越多,我就越觉得我必须使用 Manytomany 字段。提前致谢
我正在循环遍历对象列表并保存。我需要保存后新生成的 id 或指针 id,但它是 None。
这是我的代码:
for category in category_list:
saved_category = category.save()
print saved_category.parentCategory_ptr_id
print saved_category.id
Run Code Online (Sandbox Code Playgroud)
这会在例程运行后保存我的对象,但同样不会在这一行给我 id。
这是我的模型:
class ParentCategory(models.Model):
name = models.CharField(max_length=255)
class Category(ParentCategory):
description = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
类别列表的创建方式如下:
category_list = []
for row in value_list:
category = Category(description=row.description)
category_list.append(category)
return category_list
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
django django-models django-orm django-inheritance multi-table-inheritance
考虑以下:
status = queryset.values('status').annotate(count=Count('status'))
Run Code Online (Sandbox Code Playgroud)
其中statusfield 是CharFieldwith choices。这将产生一个包含status数据库值及其计数的字典列表。
有没有办法聚合status并显示其显示值?我已经查找了我可能可以模拟的代码_get_FIELD_display,但重复框架的内部代码感觉有点黑客。
作为我的模型类之一的成员函数,我有一个is_visible(self, user)返回布尔值的方法。根据定义,它将请求用户(DjangoUser模型)作为输入。
我希望能够根据对此方法的响应来过滤查询集。如何使用此函数作为查询集过滤器?
对于上下文,这是我的is_visible实现:
def is_visible(self, user):
if self.status.status_internal == "open":
return True
if self.owner == user:
return true
participations = Participation.objects.filter(event__id=self.id, participant__id=user.id)
if len(participations) > 0:
return True
if self.status.status_internal == "invite":
return True
return False
Run Code Online (Sandbox Code Playgroud) 我想要一个自定义查询来在我的管理 django 面板中显示元素列表。
因此,为了实现这一点,我使用如下代码:
class MyAdmin(admin.ModelAdmin):
....
def get_queryset(self, request):
return Post.objects.filter(author_type=AuthorType.USER)
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我还需要为此查询集添加一个 LIMIT:
class MyAdmin(admin.ModelAdmin):
....
def get_queryset(self, request):
return Post.objects.filter(author_type=AuthorType.USER)[:500]
Run Code Online (Sandbox Code Playgroud)
但是当我添加限制子句时,[:500]出现此错误:
异常值:获取切片后无法对查询重新排序。
有什么建议么?
看看这个 Django ORM 代码:
my_instance = MyModel()
my_instance.some_related_object = OtherModel.objects.using('other_db').get(id)
Run Code Online (Sandbox Code Playgroud)
此时,在第二行,Django会抛出错误:
ValueError: Cannont assign "<OtherModel: ID>": instance is on database "default", value is on database "other_db"
Run Code Online (Sandbox Code Playgroud)
对我来说,这没有多大意义。my_instance如果我什至没有调用,Django 如何知道哪个数据库是:
my_instance.save(using='some_database')
Run Code Online (Sandbox Code Playgroud)
然而?
我猜想,在构造对象期间,Django 会自动将其分配给default数据库。我可以改变它吗?我可以在创建对象时通过将参数传递给其构造函数来指定数据库吗?根据文档,创建对象时我可以传递的唯一参数是其字段的值。那么我该如何解决我的问题呢?
在 Django 1.8 中,有一个名为Model.from_db ( https://docs.djangoproject.com/en/1.8/ref/models/instances/ ) 的新方法,但我使用的是早期版本的 Django,无法切换到现在较新。查看实现,它所做的只是设置两个模型的属性:
instance._state.adding = False
instance._state.db = db
Run Code Online (Sandbox Code Playgroud)
那么将我的代码更改为:
my_instance = MyModel()
my_instance._state.adding = False
my_instance._state.db = 'other_db'
my_instance.some_related_object = OtherModel.objects.using('other_db').get(id)
Run Code Online (Sandbox Code Playgroud)
或者现在这样做已经太晚了,因为这些标志在构造函数中使用并且必须仅在构造函数中设置?
我有两个模型与我无法控制的数据库一起使用。两者均设置为managed = False. 第一个模型有一个字段,它是第二个模型的外键,但它是作为 实现的CharField,而不是作为ForeignKey。
是否可以select_related在第一个模型上使用来访问密钥第二个模型的属性?
这是一个例子:
class Foo(models.Model):
class Meta:
managed = False
fieldone = models.CharField(max_length=10)
myfk = models.CharField(max_length=20) # In practice, this points to Bar.localkey
class Bar(models.Model):
class Meta:
managed = False
localkey = models.CharField(max_length=20)
someotherattribute = models.CharField(max_length=100)
Foo.objects.all().select_related('Bar') # I know this won't work, but is there something that will?
Run Code Online (Sandbox Code Playgroud) 我的模型中有一个ArrayField持有IntegerFields。我正在寻找可以从该数组中提取最小和最大整数的最佳方法。
Django 文档没有给出类似的例子,我想知道正确的方法是否是找出如何以及是否可以在这个 ArrayField 上使用聚合函数,或者我是否可以以某种方式将其转换为正常的 Python整数列表并使用内置最小,最大功能?
执行此操作的任何建议都会有所帮助。例子更多。