我有以下关系:
class AMe(models.Model):
Field1 = models.CharField(max_length=50, choices = Field1_CHOICES)
Field2 = models.CharField(max_length=50, choices = Field2_CHOICES)
class MP(models.Model):
MyAMeID = models.ForeignKey(AMe)
Field1 = models.CharField(max_length=50, choices = Field1_CHOICES)
现在的问题是我想通过外键(即MyAme)选择MP中的记录,但是FK与AMe的主键不同,那么选择记录的简单方法是什么? MP?我应该使用queryset和filter选项吗?或者有更聪明的方式,更多Django这样做的方式,我错过了吗?
答案 0 :(得分:3)
您可以使用my_AMe_object.mp_set.all()
(Django通过连接模型的名称自动为ForeignKey
字段创建反向关系 - 此处mp
- 和_set
,可以直接设置related_name
字段属性)或MP.objects.filter(MyAMeID=my_AMe_object)
。
反向关系的示例用法:
>>> from test_app.models import AMe, MP
>>> ame = AMe.objects.create()
>>> for _ in xrange(6):
... MP.objects.create(MyAMeID=ame)
>>> ame.mp_set.all()
[<MP: MP object>, <MP: MP object>, <MP: MP object>, <MP: MP object>, <MP: MP object>, <MP: MP object>]
请注意,mp_set
会返回QuerySet
个对象,尽管结果数量很多(类似于常规的Model.objects.all()
方法)。