django - 创建一个内联管理,显示最终模型而不是 GenericForeignKey 链接表

标签 django django-admin

下面的模型显示了一个简单的 GenericForeignKey 关系。它以这种方式设置,以允许任何其他模型重用图像。

class Image(models.Model):
    name = models.CharField(max_length=150)
    desc = models.TextField(max_length=400)
    resource = models.ImageField(upload_to='imgs/generic/%Y/%m/%d')

    def __unicode__(self):
        return self.name

class ImageItem(models.Model):
    image = models.ForeignKey(Image, related_name='items', db_index=True)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField(db_index=True)
    object = generic.GenericForeignKey('content_type','object_id')

    class Meta:
        unique_together = (('image', 'content_type', 'object_id'),)

        def __unicode__(self):
            return u'%s [%s]' % (self.object,  self.image)

class ImageInline(generic.GenericTabularInline):
    model = ImageItem

目前,在另一个模型的管理员中使用 ImageInline 将显示一个包含系统内所有图像的列表框。

是否可以让内联管理显示实际的图像模型,仅显示分配给正在编辑的模型的图像?因此,允许用户立即查看附加到正在添加/编辑的模型的图像的所有相关信息。以及能够添加/删除相关图像。

预先感谢您在这方面的帮助。

最佳答案

您必须将代码更改为:

class Image(models.Model):
    name = models.CharField(max_length=150)
    desc = models.TextField(max_length=400)
    resource = models.ImageField(upload_to='imgs/generic/%Y/%m/%d')
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField(db_index=True)
    object = generic.GenericForeignKey('content_type','object_id')

    class Meta:
        unique_together = (('resource', 'content_type', 'object_id'),)

    def __unicode__(self):
        return u'%s [%s]' % (self.object,  self.resource)


class ImageInline(generic.GenericTabularInline):
    model = Image


class MyModelAdmin(admin.ModelAdmin):
    inlines = [
        ImageInline,
    ]

这样,当您在管理中添加/更改 MyModel 时,您可以将图像添加为内联。

更新:

带有文件浏览器字段的解决方案:

class Image(models.Model):
    name = models.CharField(max_length=150)
    desc = models.TextField(max_length=400)
    resource = FileBrowseField("Image", max_length=200, directory="imgs/generic/%Y/%m/%d", extensions=['.jpg', '.gif', '.png'], format='Image')
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField(db_index=True)
    object = generic.GenericForeignKey('content_type','object_id')

    class Meta:
        unique_together = (('resource', 'content_type', 'object_id'),)

    def __unicode__(self):
        return u'%s [%s]' % (self.object,  self.resource)


class ImageInline(generic.GenericTabularInline):
    model = Image


class MyModelAdmin(admin.ModelAdmin):
    inlines = [
        ImageInline,
    ]

有关 filebrowser 字段的更多信息可以在此处找到:http://code.google.com/p/django-filebrowser/wiki/installationfilebrowsefield

关于django - 创建一个内联管理,显示最终模型而不是 GenericForeignKey 链接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3849656/

相关文章:

python - Virtualenv 未从主管 AWS Elasticbeanstalk 激活

python - 搭建Django测试环境时如何创建外部数据库?

python - Django 模型 DateField to_python

django:在管理中更改模型的标题

django-admin.py 找不到自定义设置文件

django - 刷新单个应用程序 django 1.9

python - Django、Apache 和 session

django - 当我通过负载均衡器登录时,我无法跟踪客户端 IP

python - 通过 django 从 mySQL 服务器获取内容到网页时出现问题

django - 将管理日期层次结构设置为外键日期字段