Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django models 使用一个值查询多个模型_Django Models - Fatal编程技术网

Django models 使用一个值查询多个模型

Django models 使用一个值查询多个模型,django-models,Django Models,我有多个模型,都有一个FK到同一个模型。 我所知道的只是FK我如何确定哪个模型连接了FK 下面是一个clearify示例: class ModelA(models.Model): title = models.CharField("title", max_length=80) class ModelB(models.Model): fk = models.ForeignKey(ModelA) class ModelC(models.Model): fk =

我有多个模型,都有一个FK到同一个模型。 我所知道的只是FK我如何确定哪个模型连接了FK

下面是一个clearify示例:

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到modelA

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"

如果你说你有很多带有外键的模型,也许你应该考虑在ModelA拥有一个缓存这个信息的字段?它可以通过ModelB/C/的保存方法进行更新。。或者通过数据库存储过程。

如果您需要语法糖并减少查询数量,请尝试以下操作:

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

但我觉得这与try/除了你提到的以外太相似了。try/except有什么问题吗?您想使用单个数据库查询来检查这两个结果吗?假设我有20个模型,我不想尝试/除了所有模型。我想知道是否有一种查询方法来检查所有模型的结果。否则,我必须建立一个中间模型。你的意图是什么?时间优化是让一个复杂的请求而不是20个简单的请求,或者只是一个语法上的方便?