2014-05-16 88 views
0

在我的應用程序中,我有用戶,每個用戶都可以講幾種語言,每種語言都處於不同的級別。所以,這就是我寫我的模型:Django:爲具有ManyToMany-Through關係的模型編寫創建/更新模板

class Language(models.Model): 
    name = models.CharField(max_length=255 

class UserProfile(AbstractUser): 
    languages = models.ManyToManyField(Language, through='SpeakingLevel') 

class SpeakingLevel(models.Model): 
    user = models.ForeignKey(UserProfile) 
    language = models.ForeignKey(Language) 

    LEVEL_OK = 1 
    LEVEL_BAD = 2 
    LEVEL_CHOICES = (
     (1, "Ok"), 
     (2, "Bad") 
    ) 
    level = models.IntegerField(null=True, 
           choices=LEVEL_CHOICES) 

我的疑問是我應該怎麼寫爲用戶配置創建/更新的模板。我不知道。這個想法是有這樣的事情(這是從okcupid.com的截圖):

enter image description here

當然,我可以用大量的JavaScript做手工,也許一個JavaScript模板引擎增加新的語言到名單,但它處理關係聽起來很瘋狂,我敢肯定我錯過了一些很酷的Django功能來處理這個問題。

什麼是正確的方法來做到這一點?

+1

基本上,你會爲你的'SpeakingLevel'模型創建一個內聯formset並將其附加到你的'UserProfile'表單。請參閱[文檔](https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets)。我認爲這會給你你想要的。 –

+0

內聯formset加上[django-formset-js](https://pypi.python.org/pypi/django-formset-js/)做了訣竅。謝謝! –

回答

1

當您在django管理面板中創建UserProfile時,此解決方案適用。

Django有類似於inlines的東西,但問題在於在創建UserProfile時,創建該文件並轉到編輯視圖時,語言部分將不可見,然後您將看到內嵌語言。

內聯已經有所有必需的javascript代碼:)

PS。如果您發現了其他'酷'的解決方案,讓我知道在評論中,我很好奇:)

+0

我終於使用了一個內聯formset和[django-formset-js](https://pypi.python.org/pypi/django-formset-js/),一個很酷的jquery插件來處理django formsets。 –