如果我有两个型号
class modelA(models.Model):
# properties...
class modelB(models.Model):
# properties
我希望两个模型都在images
字段,然后我将如何编写图像模型?如果它只是一个,那么我认为它会像:
class Image(models.Model):
image = models.ForeignKey(modelA)
因此,如果我还希望modelB
拥有图像,那么它将如何运作?我是否必须撰写ImageA
和ImageB
?
答案 0 :(得分:4)
您希望使用generic foreign keys:
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Image(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
现在,您的Image
模型可以拥有其他任何模型的外键,并且您可以拥有与每个对象关联的多个图像。我上面链接的文档解释了如何使用此设置和查询对象等。
请参阅this answer,了解如何限制此项,以便您只能将外键键入特定型号。
答案 1 :(得分:1)
与关系走另一条路。
class Image(models.Model):
# properties
class modelA(models.Model):
image = models.ForeignKey(Image, vars=vals)
class modelB(models.Model):
image = models.ForeignKey(Image, vars=vals)
然后您可以查询为
modelB.image
modelA.image
image.modelA_set.all()
image.modelB_set.all()