python - 具有多个模型的外键

标签 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

最佳答案

看起来你想使用 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了解如何限制这一点,以便您可以仅对特定模型使用外键。

关于python - 具有多个模型的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37152200/

相关文章:

python - py.test -n <进程数> => "py.test: error: unrecognized arguments: -n"

python - Django rest framework,设置api响应Content-Encoding为gzip

django - 为每个模型实例调用一个方法

django - 当 verbose_name 更改时,如何自动更新模型的 ContentType?

python - QListWidgetItem 对象是不可散列的,这是一个错误还是有原因?

python - 通过Python SMTP服务器发送邮件

python-3.x - 在 Django 中为特定用户上传图像

python - 在 Django 中创建模型

python - 在python中读取csv文件

python - 如何响应 JSON-RPC 服务器上的 HTTP OPTIONS 请求