每个模型多个图像

我在用 Django 写一个简单的房地产列表应用。每个属性需要具有可变数量的图像。图像需要有一个可编辑的顺序。我需要让管理员用户证明。

也就是说,我有什么选择?

  1. 有我不知道的 ImageList 字段吗?

  2. 有没有像 django.contrib.comments这样的应用程序可以帮我完成这项工作?

  3. 如果我必须自己写,我该如何让管理层变得体面呢?我在想象一些比 ImageField 提供的更加光滑的东西,用拖放来重新排序。但是我完全不擅长写管理页面 = (

45527 次浏览

编写一个在属性模型中包含 ForeignKey 的 Image 模型。很有可能,您将有一些属于图像而不属于 Property 的其他字段。

  1. 变量列表,也称为多对一关系,通常通过为多个变量建立一个单独的模型来处理,在该模型中,使用“一”的 ForeignKey。

  2. 在 django.Contrib 中没有这样的应用程序,但是有几个外部项目你可以使用,例如 姜戈-摄影师,它甚至支持在管理员中查看图片。

  3. 管理站点不能做到“用户证明”,它应该只被信任的用户使用。有鉴于此,使您的管理站点体面的方法将是为您的属性定义一个 ModelAdmin,然后内联照片(内联文档)。

所以,为了给你一些快速的草稿,所有的东西看起来都像这样:

# models.py
class Property(models.Model):
address = models.TextField()
...


class PropertyImage(models.Model):
property = models.ForeignKey(Property, related_name='images')
image = models.ImageField()

以及:

# admin.py
class PropertyImageInline(admin.TabularInline):
model = PropertyImage
extra = 3


class PropertyAdmin(admin.ModelAdmin):
inlines = [ PropertyImageInline, ]


admin.site.register(Property, PropertyAdmin)

之所以在 ForeignKey 上使用 related _ name 参数,是因为这样查询更具可读性,例如,在这种情况下,您可以在视图中执行以下操作:

property = Property.objects.get(pk=1)
image_list = property.images.all()

编辑: 忘了提到,然后您可以使用 Simon Willison 的代码片段 通过 jQuery UI 使用拖放操作可以进行有序的内联在管理员中实现拖放订单

我目前正在做同样的事情,我面临着同样的问题。

经过一段时间的研究,我决定使用 姜戈成像。它有一个很好的 Ajax 特性,图像可以上传到与模型插入页面相同的页面上,并且可以进行编辑。但是,它缺乏对非 JPEG 扩展的支持。

有一个叫 姜戈画廊的包裹,我想它能满足你的需求。