根据其字段获取模型实例?

时间:2011-02-25 01:32:42

标签: django

我的模型定义:

class Thing1(models.Model):
    thing2s = models.ManyToManyField(Thing2, blank=True)

我有一个名为myThing2的Thing2实例。 我想做这样的事情:

Thing1.objects.get(thing2s__contains = myThing2)

这不是功能代码,但希望你明白我的意思。 (我正试图在它的thing2s字段中找到一个有myThing2的Thing1。)我怎么能这样做?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这未经过测试,但我相信你会说

Thing1.objects.filter(thing2s = myThing2)

由于多个Thing1可以拥有Thing2,因此请使用过滤器来取出所有具有myThing2的Thing1。

过滤器返回Thing1s列表。

答案 1 :(得分:2)

就个人而言,我会在你的多对多定义中添加'related_name'。

这样的东西
class Thing1(models.Model):
    thing2s = models.ManyToManyField(Thing2, blank=True, related_name='thing1s')

然后,从您的Thing2,您可以访问与之相关的'thing1s'....

thing2.thing1s.all()

但是,我必须要问,如上所述,如果thing2只能与单个thing1相关,那么你应该使用ForeignKey(在Thing2而不是Thing1中)而不是ManyToMany。但是,上述解决方案仍然有效。

所以,你的课程将是......

class Thing1(models.Model):
    pass

class Thing2(models.Model):
    thing1 = models.ForeignKey(Thing1, blank=True, related_name='thing2s')

所以,从一个东西2,你可以通过简单的方式得到它的单一东西....

a_thing1 = thing2.thing1

并且从thing1中,您可以获得通过....引用它的所有thing2的列表。

thing2s = thing1.thing2s.all()