2011-02-27 48 views
5

我想要一個表單來添加,編輯和刪除多對多關係的值,使用指定的中間表,就像我可以從Django的管理員TabularInline表單獲得的值一樣。有沒有辦法做到這一點?我沒有在Django的文檔中找到它。Django多對多通過中介表格形式像管理員的TabularInline窗體?

我已經創建了一個表單來編輯UserProfile,並希望能夠使用UserProfile_Language(語言和熟練程度)來添加,編輯和刪除多對多表單。我如何爲此製作表格?我如何在視圖中處理這個問題?

我的模型如下:

class Language(models.Model): 
    LANGUAGE_ENGLISH = 1 
    LANGUAGE_FRENCH = 2 
    LANGUAGE_CHOICES = (
     (LANGUAGE_ENGLISH, 'English'), 
     (LANGUAGE_FRENCH, 'French') 
    ) 

    language = models.SmallIntegerField(choices=LANGUAGE_CHOICES) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    languages = models.ManyToManyField(Language, null=True, blank=True, through='UserProfile_Language') 

class UserProfile_Language(models.Model): 
    FLUENT = 1 
    OK = 2 
    PROFICIENCY_CHOICES = (
     (FLUENT, 'Fluent'), 
     (OK, 'Okay') 
    ) 

    userprofile = models.ForeignKey(UserProfile) 
    language = models.ForeignKey(Language) 
    proficiency = models.SmallIntegerField(choices=PROFICIENCY_CHOICES) 

回答

2

我假設你的意思是在前端,而不是在管理。我相信你可以使用表單集來做到這一點。 (http://docs.djangoproject.com/en/dev/topics/forms/formsets/)。您可以爲通過表格創建表單以在表單集中使用。

此外,您可能已簡化發佈的模型,但如果語言模型實際上只是一個選擇字段,爲什麼不將語言和userprofile_language合併爲一個?您可以用選擇字段替換ForeignKey並獲得相同的行爲。這會讓你的顯示更容易。 (忽略語言實際上有更多的字段)

+0

表單集看起來像我當前實現的正確方式,但文檔看起來有點簡單。網上有更好的例子嗎?關於只是組合語言和userprofile_language,這是我原來的實現,但從純數據庫視圖看起來是錯誤的,再加上我不知道如何實現它的形式。 – user636381 2011-02-27 20:46:18

+1

這可能有所幫助:http://djangosnippets.org/snippets/1246/ – lovefaithswing 2011-02-28 02:27:32