2012-01-24 143 views
2

我建立一個用戶配置文件在Django,在這裏我希望用戶輸入他的技術更新在Django一個M2M領域。技能字段爲ManyToMany字段,型號名稱爲Skills。下面顯示的是models.py文件如何通過AJAX調用

class UserProfile(models.Model): 

    name = models.CharField(max_length = 300, null = True, blank=True) 
    location = models.CharField(max_length=500, null=True, blank=True) 
    birthday = models.DateField(null = True, blank = True) 
    user = models.ForeignKey(User, unique=True) 
    skills = models.ManyToManyField(Skill, blank=True, null=True) 


class Skill(models.Model): 
    name = models.CharField(max_length=50) 

    def __unicode__(self): 
     return u'%s' %(self.name) 

正如你可以看到所有的字段都設置null=True。這是因爲我將這些字段保留爲空,並希望用戶在他/她想要的時候輸入它們。所以我正在使用AJAX調用更新所有這些字段。我已成功地編輯所有其他的領域,但我不知道我怎麼可以編輯M2M field

我可以使用profile.skills.all()鏈接到個人資料全技能列表,但我不知道如何更新此名單。我基本上想要從這個列表中添加或刪除技能對象。我認爲有使用,我可以編輯的字段

任何幫助是非常感謝的東西在django.db.models.fields.related.ManyRelatedManager。在這個問題上我沒有發現任何東西。有一些關於使用ModelForm編輯此字段的信息,但沒有關於編輯單個字段的信息。

回答

1

要編輯m2m中間表,請在ManyRelatedManager上使用addremove方法。

https://docs.djangoproject.com/en/1.3/ref/models/relations/#django.db.models.fields.related.RelatedManager.add

這是真的,到谷歌在Django文檔的最困難的事情是manytomanyfield等連續串。我已經爲formfield_for_manytomany發佈了博文,僅出現在我自己的搜索結果中。

+0

我想我已經錯誤地表述我的問題,我不想要編輯的技巧對象本身,但我想編輯的M2M領域的剖面模型,通過編輯我的意思是我想添加或刪除'skill'對象我的'profile.skills' – Sachin

+0

哦,我的錯! 'profile.skills.add(object_id)'和'profile.skills.remove(object_id)'將增加和刪除技能。你可以通過'profile.skills.through'這只是另一種的Django模型 –

+0

我不明白我怎麼能過濾它們通過'profile.skills.through'能否請您給我一個鏈接,直接過濾。非常感謝您的幫助 – Sachin