我有一些模型需要与一些图像有很多关系。我不想单独创建每个关系,而是希望有一些通用的模型关系,我可以用于所有模型。所以我创建了Image和ImageItem模型(我不确定我是否在正确的轨道上......):
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
class Image(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='images')
class ImageItem(models.Model):
image = models.ForeignKey(Image)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
我想要做的是,每次创建新图像时,我都想选择要将此图像分配给哪些对象。所以在管理员中我需要有类似的东西:
Image: chicago_bulls.jpg
Selected model: Player
Selected:
Michael Jordan
Scotie Pippen
或
Image: kobe_bryant.jpg
Selected model: Team
Selected:
Los Angeles Lakers
US National Team
我的模型设计是否正确?我也想使用ModelMultipleChoiceField,但我无法弄清楚如何做到这一点。
答案 0 :(得分:1)
查看解释GenericInlineModelAdmin
的文档。
如果我说得对,那么这个例子就是你想要的:
class Image(models.Model):
image = models.ImageField(upload_to="images")
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey("content_type", "object_id")
class Product(models.Model):
name = models.CharField(max_length=100)
它与您的设计略有不同,因为图像字段是模型的一部分,可以为所有其他(内容)对象/模型添加泛型关系。
这样您就可以使用已经提到的InlineAdmins
:
class ImageInline(generic.GenericTabularInline):
model = Image
class ProductAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]