我正在寻找使用Django的ORM进行复杂的过滤.
楷模:
class Book(models.Model):
title = models.TextField()
bestseller = models.BooleanField(default=False)
class Author(models.Model):
name = models.TextField()
books = models.ManytoManyField(Book)
Run Code Online (Sandbox Code Playgroud)
如何查询至少拥有一本畅销书的所有作者?
查询:
best_authors = Author.objects.filter(<relevant filter>)
Run Code Online (Sandbox Code Playgroud)
编辑:
根据文档,以下应该工作:
best_authors = Author.objects.filter(books__bestseller=True)
Run Code Online (Sandbox Code Playgroud)
不幸的是,最终会返回重复的作者对象(他/她的每本畅销书的同一作者,一遍又一遍).
我有一个模型引用了我想以详细方式序列化的通用关系.
class AType(models.Model):
foo = CharField()
class BType(models.Model):
bar = PositiveIntegerField()
class ToSerialize(models.Model):
scope_limit = models.Q(app_label="app", model="atype") | \
models.Q(app_label="app", model="btype")
content_type = models.ForeignKey(ContentType, limit_choices_to=scope_limit)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
Run Code Online (Sandbox Code Playgroud)
我希望ToSerialize视图集的list方法的JSON看起来像:
[
{
"atype": { "id": 1, "foo": "a" }
},
{
"atype": { "id": 2, "foo": "b" }
},
{
"btype": { "id": 1, "bar": "1" }
},
{
"btype": { "id": 2, "bar": "2" }
}
]
Run Code Online (Sandbox Code Playgroud)
有没有办法让ToSerialize对象的视图集的序列化器生成基于content_type/object_id的"条件字段"来实现这种效果?
有没有办法将 Python 对象与深度复制生成的对象进行比较?
例如:
import copy
original_object = SomeObject()
cloned_object = copy.deepcopy(original_object)
assertDeepCopy(original_object, cloned_object)
Run Code Online (Sandbox Code Playgroud)