2009-02-11 53 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擴展的支持。我希望在幾天內我會有解決方法。 :)