2009-02-11 68 views
60

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

这样说,我有什么选择?

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

  2. 有没有像我这样的工作为django.contrib.comments的应用程序?

  3. 如果我必须亲自写这篇文章,我将如何去做管理方面的体面?我想象的东西比ImageField提供的东西要轻松得多,而且有些拖放可以重新排序。但我是一个完整的clutz在编写管理页面=(

回答

94
  1. 变量列表,也被称为多到一的关系,通常是通过使一个单独的模型用于许多和,在该模型中,使用一个ForeignKey“一个”处理。

  2. 在django.contrib中没有这样的应用程序,但有se您可以使用的veral外部项目,例如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() 

编辑:忘了提,你就可以实现使用西蒙·威利森的片段Orderable inlines using drag and drop with jQuery UI

+1

PropertyImage模型应该包含一个用于排序的字段。 – akaihola 2009-02-12 10:11:47

5

写有一个ForeignKey到您的属性模型的图像模型。很可能,你就会有属于其他一些领域的形象和不到属性。

3

我在管理员拖和拖放排序米现在做同样的事情,我面临同样的问题。

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