我有多个型号,它们都有相同型号的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)
答案 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)