我有几个设置如下的模型:

class Bar(models.Model):
  baz = models.CharField()

class Foo(models.Model):
  bar1 = models.ForeignKey(Bar)
  bar2 = models.ForeignKey(Bar)
  bar3 = models.ForeignKey(Bar)


在代码的其他地方,我最终得到了Bar的实例,并且需要以某种方式找到它所连接的Foo。现在,我想出了使用Q进行多重或查询的方法,例如:

foo_inst = Foo.objects.get(Q(bar1=bar_inst) | Q(bar2=bar_inst) | Q(bar3=bar_inst))


我需要弄清楚的是,在实际遇到的3个案例中,哪一个至少是成员的名称(bar1,bar2或bar3)。有什么好方法吗?有没有更好的方法来构造查询以收集该信息?

最佳答案

try:
    Foo.objects.get(bar1=bar_inst)
    print 'bar1'
except Foo.DoesNotExist:
    try:
        Foo.objects.get(bar2=bar_inst)
        print 'bar2'
    except Foo.DoesNotExist:
        try:
           Foo.objects.get(bar3=bar_inst)
           print 'bar3'
        except Foo.DoesNotExist:
           print 'nothing found'


还可以考虑将related_name添加到模型的所有条形字段中。

关于python - Django在多重OR查询中找到匹配的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12454997/

10-11 22:11
查看更多