使用一个值查询多个模型

时间:2010-01-04 19:06:37

标签: django-models

我有多个型号,它们都有相同型号的FK。 我所知道的是FK如何确定哪个型号附有FK?

下面的示例清除:

class ModelA(models.Model):
      title = models.CharField("title", max_length=80)

class ModelB(models.Model):
      fk = models.ForeignKey(ModelA)

class ModelC(models.Model):
      fk = models.ForeignKey(ModelA)

如何在不使用try / except的情况下弄清楚B或C是否具有FK? (FK只能在其中一个中,为了记录,在这种情况下我只添加了两个模型,但在现实世界的应用程序中,有多个可能的x数量的模型具有FK模型A)

3 个答案:

答案 0 :(得分:0)

if ModelB.objects.filter(fk=your_fk):
   print "B"
else:
   print "C"

如果你不确定这个fk是否完全出现在B或C中,请添加另一张支票:

if ModelB.objects.filter(fk=your_fk):
   print "B"
elif ModelC.objects.filter(fk=your_fk):
   print "C"
else:
   print "none"

答案 1 :(得分:0)

如果你说你有很多带有外键的模型ModelA,你可以考虑在ModelA中有一个字段来缓存这些信息吗?它可以通过save()的{​​{1}}方法或数据库存储过程进行更新。

答案 2 :(得分:0)

如果您正在使用语法糖并减少查询次数,请尝试以下操作:

a=ModelA.objects.annotate(nb=Count('modelb'), nc=Count('modelc')).get(pd=your_fk)
if a.nb:
    return 'B'
elif a.nc:
    return 'C'
else:
    return 'A'

(django> = v1.1)