我的模型定义:
class Thing1(models.Model):
thing2s = models.ManyToManyField(Thing2, blank=True)
我有一个名为myThing2的Thing2实例。 我想做这样的事情:
Thing1.objects.get(thing2s__contains = myThing2)
这不是功能代码,但希望你明白我的意思。 (我正试图在它的thing2s字段中找到一个有myThing2的Thing1。)我怎么能这样做?
感谢您的帮助!
答案 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()