带有多个模型的ForeignKey

ben*_*ham 3 python django django-models django-rest-framework

如果我有两个模型

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

class modelB(models.Model):
    # properties
Run Code Online (Sandbox Code Playgroud)

并且我想将两个模型images都放在一个字段中,那么我将如何编写图像模型?如果只是一个,那么我想它将是:

class Image(models.Model):
   image = models.ForeignKey(modelA)
Run Code Online (Sandbox Code Playgroud)

因此,如果我还想modelB拥有图像,那将如何工作?我需要写ImageAImageB吗?

sol*_*oke 5

看起来您想使用通用外键

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')
Run Code Online (Sandbox Code Playgroud)

现在,您的Image模型可以具有指向其他任何一个模型的外键,并且您可以具有与每个对象关联的多个图像。我上面链接到的文档说明了如何使用此设置和查询对象等。

有关如何限制此限制的信息,请参见此答案,以便可以将外键仅用于特定模型。