代码之家  ›  专栏  ›  技术社区  ›  Oli

每个模型有多个图像

  •  77
  • Oli  · 技术社区  · 17 年前

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

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

    2. 有这样的应用程序吗 django.contrib.comments 那能帮我吗?

    4 回复  |  直到 17 年前
        1
  •  140
  •   Qback    8 年前
    1. 变量列表,也称为多对一关系,通常是通过为多对象创建一个单独的模型来处理的,在该模型中,对“一”使用外键。

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

    3. 管理站点不能被设置为“用户证明”,它只能由受信任的用户使用。鉴于此,使您的管理网站体面的方法是为您的房产定义一个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参数的原因是这样您的查询将更具可读性,例如,在这种情况下,您可以在视图中执行以下操作:

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

    编辑:忘了说,然后您可以使用Simon Willison的代码片段在管理员中实现拖放排序 Orderable inlines using drag and drop with jQuery UI

        2
  •  6
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    编写一个具有属性模型外键的图像模型。很可能,您会有一些属于图像而不属于属性的其他字段。

        3
  •  4
  •   Wernight    11 年前

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

    经过一段时间的研究,我决定使用 django-imaging 。它有一个很好的Ajax功能,图像可以上传到与模型插入页面相同的页面上,并且可以编辑。然而,它缺乏对非JPEG扩展的支持。

        4
  •  0
  •   Dzhuang    4 年前

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

    推荐文章