Python 通过外键获取django记录

Python 通过外键获取django记录,python,django,django-queryset,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

我有以下关系:

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选项吗?或者有没有一种更聪明、更聪明的方法来实现这一点,而我却错过了?

您可以使用
my\u AMe\u object.mp\u set.all()
(Django通过连接模型名称(此处为
mp
)和
\u set
,自动为
ForeignKey
字段创建反向关系,可直接通过
相关的\u name
字段属性)或
mp.objects.filter(MyAMeID=my\u AMe\u 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>]
>>从测试应用程序模型导入AMe、MP
>>>ame=ame.objects.create()
>>>对于X范围(6)中的uu:
…MP.objects.create(MyAMeID=ame)
>>>ame.mp_set.all()
[, , , ]

请注意,
mp\u set
返回一个
QuerySet
对象,不管结果的数量如何(类似于常规的
Model.objects.all()
方法)。

您可以使用
my\u AMe\u object.mp\u set.all()
(Django通过连接模型名称(此处为
mp
)和
\u set
,自动为
ForeignKey
字段创建反向关系,可直接通过
相关的\u name
字段属性)或
mp.objects.filter(MyAMeID=my\u AMe\u 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>]
>>从测试应用程序模型导入AMe、MP
>>>ame=ame.objects.create()
>>>对于X范围(6)中的uu:
…MP.objects.create(MyAMeID=ame)
>>>ame.mp_set.all()
[, , , ]

请注意,
mp\u set
返回一个
QuerySet
对象,不管结果的数量如何(类似于常规的
Model.objects.all()
方法)。

您可以使用
my\u AMe\u object.mp\u set.all()
(Django通过连接模型名称(此处为
mp
)和
\u set
,自动为
ForeignKey
字段创建反向关系,可直接通过
相关的\u name
字段属性)或
mp.objects.filter(MyAMeID=my\u AMe\u 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>]
>>从测试应用程序模型导入AMe、MP
>>>ame=ame.objects.create()
>>>对于X范围(6)中的uu:
…MP.objects.create(MyAMeID=ame)
>>>ame.mp_set.all()
[, , , ]

请注意,
mp\u set
返回一个
QuerySet
对象,不管结果的数量如何(类似于常规的
Model.objects.all()
方法)。

您可以使用
my\u AMe\u object.mp\u set.all()
(Django通过连接模型名称(此处为
mp
)和
\u set
,自动为
ForeignKey
字段创建反向关系,可直接通过
相关的\u name
字段属性)或
mp.objects.filter(MyAMeID=my\u AMe\u 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>]
>>从测试应用程序模型导入AMe、MP
>>>ame=ame.objects.create()
>>>对于X范围(6)中的uu:
…MP.objects.create(MyAMeID=ame)
>>>ame.mp_set.all()
[, , , ]


请注意,
mp\u set
返回一个
QuerySet
对象,不管结果的数量如何(类似于常规的
Model.objects.all()
方法).

我是否必须按表中显示的那样将MyAMeID命名为MyAMeID\u id?如果要将模型的实例传递给
过滤器
,请使用字段名称。在这种情况下,将是
MyAMeID
。如果要传递主键,请使用
MyAMeID\u id
(django在引擎盖下附加
\u id
).Hmm.我似乎无法让这两种方法都起作用。它应该起作用,filter方法是最常见的,但mp_set.all()也是正在返回以下错误:AMe'object没有属性'mp_set',上面的代码片段可能没有包含您的模型的某些内容,您可以包含整个文件吗?它太大了,我不能,因为机密性:-(一个问题可能是mp中有大量的'models.ManyToManyField'。我是否必须将MyAMeID作为表中显示的这个MyAMeID_id?如果要将模型实例传递给
过滤器
,请使用该字段的名称。在这种情况下,这将是
MyAMeID
。如果要传递主键,请使用
MyAMeID_id
(django在引擎盖下附加了
\u id
)。嗯,我似乎无法让这两种方法都起作用。它应该能起作用,过滤方法是最常见的,但也是mp_set.all()正在返回以下错误:AMe'object没有属性'mp_set',上面的代码片段可能没有包含您的模型的某些内容,您可以包含整个文件吗?它太大了,我不能,因为机密性:-(一个问题可能是mp中有大量的'models.ManyToManyField'。我是否必须将MyAMeID作为表中显示的这个MyAMeID_id?如果要将模型实例传递给
过滤器
,请使用该字段的名称。在这种情况下,这将是
MyAMeID
。如果要传递主键,请使用
MyAMeID_id
(django在引擎盖下附加了
\u id
)。嗯,我似乎无法让这两种方法都起作用。它应该能起作用,过滤方法是最常见的,但也是mp_set.all()正在返回以下错误:AMe'object没有属性'mp_set',上面的代码片段可能没有包含您的模型的某些内容,您可以包含整个文件吗?它太大了,我不能,因为机密性:-(一个问题可能是mp中有大量的'models.ManyToManyField'。我是否必须将MyAMeID显示为表中显示的这个MyAMeID_id?如果要将模型的实例传递给
过滤器
,请使用该字段的名称。在这种情况下,将是
MyAMeID
。如果要传递主键,请使用
MyAMeI>)