2012-01-24 9 views
2

私はユーザにスキルセットを入力させたいユーザープロファイルをdjangoに構築しています。スキルフィールドは、モデル名SkillsManyToManyフィールドです。あなたはすべてのフィールドがnull=Trueを設定されて見ることができるように、以下のmodels.pyファイルAJAXコールでdjangoのM2Mフィールドを更新するには

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) 

を示しています。これは、フィールドを空のままにしておき、ユーザが希望するときに入力するようにしたいからです。だから私はAJAX呼び出しを使用してこれらのフィールドをすべて更新しています。私は他のすべてのフィールドを編集することができましたが、私はどのように編集することができないのですか?M2M field

profile.skills.all()を使用してプロファイルにリンクされているすべてのスキルのリストを取得できます。 。基本的には、このリストからスキルオブジェクトを追加または削除したいと考えています。私はそこに何かがあると思うdjango.db.models.fields.related.ManyRelatedManager私はフィールドを編集することができます

本当にありがとうございます。私はこのテーマについて何も発見していない。 ModelFormを使用してこのフィールドを編集するにはいくつかの情報がありますが、個々のフィールドの編集については何もありません。

答えて

1

m2m中間テーブルを編集するには、ManyRelatedManageraddremoveのメソッドを使用します。 DjangoのドキュメントにGoogleに

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

それは本当だ、最も難しいものはの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

関連する問題