2012-04-25 89 views
0

我有两个类: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,因为我的模型由多语言模块进一步复杂化。

回答

2

您可以使用注释来过滤至少有一个人的国籍。

from django.db.models import Count 
Nationality.objects.annotate(person_count=Count('person')).filter(person_count__gte=1) 
+0

工作!由于什么魔法,我不知道,但它肯定奏效。我的意思是“伯爵”如何知道“人”,因为这种关系是基于“人”的?我想我必须对Aggregations做一些阅读!非常感谢!!! – dingoj 2012-04-25 13:58:38

+0

是的,聚合文档是[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