我正在用 Django 编写一个简单的房地产列表应用程序。每个属性都需要具有可变数量的图像。图片需要有一个可编辑的顺序。我需要使管理员用户安全。
也就是说,我有哪些选择?
是否有我不知道的 ImageList 字段?
是否有类似
django.contrib.comments
的应用可以帮我完成这项工作?如果我必须自己编写,我将如何使管理端变得体面?我正在想象一些比 ImageField 提供的更灵活的东西,有一些拖放来重新排序。但是我在写管理页面时完全笨拙 =(
最佳答案
变量列表,也称为多对一关系,通常通过为多创建一个单独的模型来处理,并在该模型中使用指向“一”的 ForeignKey。
django.contrib 中没有这样的应用程序,但是有几个外部项目可以使用,例如django-photologue它甚至支持在管理员中查看图像。
管理站点不能成为“用户证明”,只能由受信任的用户使用。鉴于此,使您的管理网站体面的方法是为您的属性(property)定义一个 ModelAdmin,然后内联照片 (inline documentation)。
所以,给你一些快速的草稿,一切看起来像这样:
# 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 参数的原因是您的查询将更具可读性,例如在这种情况下,您可以在您的 View 中执行类似的操作:
property = Property.objects.get(pk=1)
image_list = property.images.all()
编辑:忘记提及,然后您可以使用 Simon Willison 的代码片段 Orderable inlines using drag and drop with jQuery UI 在管理员中实现拖放排序。
关于django - 每个模型多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/537593/