我有一个带有两个自定义管理器方法的Django模型.每个都根据对象的不同属性返回模型对象的不同子集.
有没有办法获取查询集,或只是一个对象列表,这是每个管理器方法返回的查询集的并集?
我需要创建一个查询集并手动添加一些我从不同查询结果中获得的对象,以便在表中显示它.我使用xx = set()但它没有完成这项工作.
可以将ForeignKey设置为多于模型.我想选择让我们说,零件和机器模型.
我读到这个将多个模型组合成一个列表:如何在Django视图中组合2个或更多查询集?
但是我可以以某种方式对该名单进行外交吗?
我有一组Django模型,如下图所示(反向关系的名称显示在黄色气泡中):
Django模型http://mipadi.cbstaff.com/images/misc/people_django.jpg
在每个关系中,a Person可以具有0个或更多个项目.
此外,该slug领域(不幸的是)不是唯一的; 多个Person记录可能具有相同的段塞字段.基本上这些记录是重复的.
我想获得满足以下条件的所有记录的列表:所有重复记录(即具有相同的段塞),其中至少一个EntryOR至少一个AudioOR至少一个EpisodeOR至少一个Article.
到目前为止,我有以下查询:
Person.objects.values('slug').annotate(num_records=Count('slug')).filter(num_records__gt=1)
Run Code Online (Sandbox Code Playgroud)
这将所有记录分组slug,然后添加一个num_records属性,说明有多少记录有那个slug,但是没有执行额外的过滤(我甚至不知道这是否会正常工作,因为,给定一组重复记录,一个人可能有,例如,和Entry另一个人可能有a Article).
简而言之,我想找到所有重复的记录,并将它们及其相关模型折叠到一个记录中.
使用Django最好的方法是什么?
我有一个django模型,称为"用户",它存储一些关于人的基本信息,即名字和姓氏.我现在有在我的Django模型一个简单的搜索,其中,如果用户键入的第一个名字,查询集返回前10场比赛Django的,由有序的最后名称.
例如,目前,如果您搜索"Sam",您可能会得到以下结果:
这个代码很简单:
User.objects.filter(Q(first__istartswith=token)).order_by('last')
Run Code Online (Sandbox Code Playgroud)
但是,我想改变它,以便首先返回任何确切的名字匹配,然后是其余的结果.因此,如果有人输入"Sam",结果应该是:
(确切的名字首先匹配,按姓氏排序,然后是按姓氏排序的其余匹配).
我想把它变成2个查询集然后只是组合列表,但我想知道是否有可能在1个查询中执行此操作,理想情况下坚持使用基本的django查询集API(而不是编写一次性查询).有谁知道这样做的方法?
提前致谢.
鉴于以下代码,我想知道如何填充RecordsResource每个真实的记录数据:
models.py
class Record(models.Model):
content_type = models.ForeignKey(ContentType, editable=False, null=True)
user = models.ForeignKey(User, related_name='records')
issued = models.DateTimeField(auto_now_add=True)
date = models.DateField()
def save(self, *args, **kwargs):
if not self.content_type:
self.content_type = ContentType.objects.get_for_model(self.__class__)
super(Record, self).save(*args, **kwargs)
def as_leaf_class(self):
model = self.content_type.model_class()
if model == self.__class__:
return self
return model.objects.get(pk=self.id)
class Record1(Record):
# some fields
# ...
class RecordN(Record):
# some fields
Run Code Online (Sandbox Code Playgroud)
api.py
class BaseModelResource(ModelResource):
class Meta(object):
authentication = ApiKeyPlusWebAuthentication()
authorization= Authorization()
cache = SimpleCache()
throttle = CacheDBThrottle(
throttle_at=350,
# 1 day
expiration=86400 …Run Code Online (Sandbox Code Playgroud) 说,我有一个带有文本字段的模型:
class SomeModel
keyword=models.CharField(null=True, max_length=255)
Run Code Online (Sandbox Code Playgroud)
现在,我知道如何检查参数字符串(让我们调用变量“querystring”是否包含在 field 关键字中:
results = SomeModel.objects.filter(keyword_icontains=querystring).all()
Run Code Online (Sandbox Code Playgroud)
我在django 文档中找到的
问题,如何过滤字段值包含在查询字符串变量中的对象?
抱歉,如果我的问题令人困惑......也许一个例子会澄清......在django文档中,如果我的关键字字段包含,例如,'python-django',那么,对于包含'django'的查询字符串,我可以提取包含该字段的对象
results=SomeModel.objects.filter(keyword_icontains=querystring).all()
or results=SomeModel.objets.filter(keyword_icontains='django').all()
Run Code Online (Sandbox Code Playgroud)
但是说,我想提取关键字字段包含在查询字符串中的所有行/对象?例如,如果查询字符串包含“在 django 中,我如何创建过滤器”?然后我希望结果包含关键字字段具有值“django”、“filter”等的所有对象...
我已经研究了几天了.不幸的是,到目前为止我找到的所有提议的解决方案并不适合我.
我希望手动将两个Django QuerySets组合成一个Django模型,然后我想使用Django Rest Framework序列化程序进行序列化.然后我使用序列化程序输出JSON.
我已经在SO上找到了各种解决方案,建议使用itertools和chain,但目前还不清楚如何序列化链的结果.
请注意,我的目标是用于Web应用程序性能目的.每个QuerySet都可以独立工作,但它需要两个单独的Ajax调用来检索结果.我更愿意只进行一次Ajax调用,在服务器端手动组合结果,然后返回组合的JSON.
这SO答案是接近,但我无法弄清楚如何序列链的结果,使用DRF串行.
给定两个不同的模型,它们具有相同的父基类。是否可以使用Django Rest Framework序列化程序或serpy序列化包含两个子模型的实例的链表?
给定一些示例模型:
class BaseModel(models.Model):
created_at = models.DateField()
class Meta:
abstract = True
class ChildModel1(BaseModel):
field_one = models.TextField()
class ChildModel2(BaseModel):
field_two = models.TextField()
Run Code Online (Sandbox Code Playgroud)
还有一个示例视图:
def get(self, request):
q1 = ChildModel1.objects.all()
q2 = ChildModel2.objects.all()
chained_list = sorted(
chain(q1, q2),
key=attrgetter('created_at'))
serializer = BaseModelSerializer(chained_list, many=True)
Run Code Online (Sandbox Code Playgroud)
链接模型的方法来自该问题的答案。
通过我目前的尝试,我得到了一个非常明显的错误,内容如下:
AttributeError: 'ChildModel1' object has no attribute 'field_two'
Run Code Online (Sandbox Code Playgroud)
我知道将两种模型与不同领域混合使用不是最佳做法,但就我而言,我认为这是必要的。
我测试过的一些序列化器示例:
第一个例子:
class BaseModelSerializer(serializers.ModelSerializer):
class Meta:
model = BaseModel
Run Code Online (Sandbox Code Playgroud)
第二个例子:
class BaseModelSerializer(serpy.Serializer):
created_at = serpy.StrField()
field_one = serpy.StrField(required=False)
field_two = serpy.StrField(required=False)
Run Code Online (Sandbox Code Playgroud) 这并不是 django 特有的。
一罐模型
Place (with location, name, and other common attributes)
- Restaurant (menu..)
- ConcertHall (hall size..)
Run Code Online (Sandbox Code Playgroud)
《Two scoops of Django 1.8》一书的作者强烈建议不要使用多表继承。
假设您想根据位置查询地点并对结果进行分页(它不必是位置,可以是我们要过滤的任何其他常见属性)
我可以看到如何使用多表继承来实现它。
select place.id from place LEFT OUTER JOIN "restaurant" on (restuarant.id=place.id) LEFT OUTER JOIN "concerthall" on (concerthall.id=place.id) where ... 按距离排序
用抽象继承来实现可行吗?