ModelChoiceField:获取对象只用作另一个对象的外键
问题描述:
我有两个类:ModelChoiceField:获取对象只用作另一个对象的外键
class Nationality(Model):
name = models.Charfield()
class Person(Model):
name = models.Charfield()
nationality = ForeignKey("Nationality")
我想显示,在一个完全不同的形式ModelChoiceField
,只有那些被用作一个民族外键在Person
表中。实际上还有很多,但我只对用作现有Person
的外键的那些感兴趣。
这个不会工作,因为它返回字段名称和引用主键的字典。
Person.objects.values('nationality')
我想返回的Nationality
对象,以便我能够引用其name
属性。
我不想使用原始SQL,因为我的模型由多语言模块进一步复杂化。
答
您可以使用注释来过滤至少有一个人的国籍。
from django.db.models import Count
Nationality.objects.annotate(person_count=Count('person')).filter(person_count__gte=1)
工作!由于什么魔法,我不知道,但它肯定奏效。我的意思是“伯爵”如何知道“人”,因为这种关系是基于“人”的?我想我必须对Aggregations做一些阅读!非常感谢!!! – dingoj 2012-04-25 13:58:38
是的,聚合文档是[here](https://docs.djangoproject.com/en/1.4/topics/db/aggregation/),但也一定要阅读[向后关系](https:// docs .djangoproject.com/en/1.4/topics/db/queries /#following-relationships-backward),如果你还不知道。 – 2012-04-25 14:05:33