ForeignKey有多个型号

时间:2016-05-11 02:40:15

标签: python django django-models django-rest-framework

如果我有两个型号

class modelA(models.Model):
    # properties...

class modelB(models.Model):
    # properties

我希望两个模型都在images字段,然后我将如何编写图像模型?如果它只是一个,那么我认为它会像:

class Image(models.Model):
   image = models.ForeignKey(modelA)

因此,如果我还希望modelB拥有图像,那么它将如何运作?我是否必须撰写ImageAImageB

2 个答案:

答案 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()