django - 每个模型多个图像

标签 django django-models

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

也就是说,我有哪些选择?

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

  2. 是否有类似 django.contrib.comments 的应用可以帮我完成这项工作?

  3. 如果我必须自己编写,我将如何使管理端变得体面?我正在想象一些比 ImageField 提供的更灵活的东西,有一些拖放来重新排序。但是我在写管理页面时完全笨拙 =(

最佳答案

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

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

  3. 管理站点不能成为“用户证明”,只能由受信任的用户使用。鉴于此,使您的管理网站体面的方法是为您的属性(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/

相关文章:

python - 棘手的模型继承 - Django

django - 提高 Django ORM 的性能

python - 如何在 Django 中返回 401 Unauthorized?

python - Django 中的日期范围过滤器

django - 潜在的 docker 权限问题导致枕头说它没有安装,尽管它是

python - : You have not defined a default connection 处的连接错误

python - Django 没有将数据传递给 POST 请求的 View

django - Django 批量创建检查已经存在于批量对象和实例中?

python - 使用信号创建带有用户名的组

django-models - 如何在 Django 中生成随机数