我在Django中编写一个简单的房地产列表应用程序。每个属性需要具有可变数量的图像。图片必须具有可编辑的顺序。而且我需要使管理员用户验证。
这样说,我有什么选择?
有我不知道的ImageList字段吗?
是否有类似的应用程序
django.contrib.comments
对我有用?如果我必须自己编写它,我将如何使管理端像样?我想象中的东西比ImageField提供的东西要光滑得多,并且需要一些拖放来进行重新排序。但是我在编写管理页面方面完全是笨手笨脚
Answers:
变量列表,也称为多对一关系,通常是通过为多个对象创建单独的模型来处理的,在该模型中,使用外键指向“一个”。
django.contrib中没有这样的应用程序,但是您可以使用多个外部项目,例如django-photologue,它甚至对在管理员中查看图像提供了一些支持。
不能将管理站点设置为“用户证明”,它只能由受信任的用户使用。鉴于此,使您的管理站点更美观的方法是为您的媒体资源定义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的代码段在admin中实现拖放排序,并使用jQuery UI进行拖放
我目前正在做同样的事情,并且面临同样的问题。
经过一段时间的研究,我决定使用django-imaging。它具有出色的Ajax功能,可以将图像与模型“插入”页面上载到同一页面上,并且可以进行编辑。唯一缺少的是对非JPEG扩展的支持。我希望我能在几天内找到解决方法。:)