72

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

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

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

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

  3. 如果我必须自己编写它,我将如何使管理员端体面?我正在想象一些比 ImageField 提供的更漂亮的东西,并带有一些用于重新排序的拖放操作。但我在编写管理页面时完全是个笨蛋=(

4

4 回答 4

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

  2. 在 django.contrib 中没有这样的应用程序,但是您可以使用几个外部项目,例如django-photologue,它甚至支持在管理员中查看图像。

  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 的片段Orderable inlines 使用 jQuery UI 拖放在管理员中实现拖放排序

于 2009-02-11T17:52:25.107 回答
7

将具有 ForeignKey 的 Image 模型写入您的 Property 模型。很可能,您将拥有一些属于图像而不属于属性的其他字段。

于 2009-02-11T16:57:54.957 回答
4

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

经过一段时间的研究,我决定使用django-imaging。它有一个很好的Ajax功能,图像可以上传到模型插入页面的同一页面上,并且可以编辑。它唯一缺少的是对非 JPEG 扩展的支持。我希望我能在几天内找到解决方法。:)

于 2009-06-24T19:51:16.417 回答
0

有一个名为django-galleryfield的包。我想它会满足你的需求。

于 2021-08-19T13:16:21.127 回答