用外键获取django记录

时间:2014-01-05 20:28:16

标签: python django django-queryset

我有以下关系:

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这样做的方式,我错过了吗?

1 个答案:

答案 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()方法)。