2012-04-24 19 views
4

私は、次のモデルのためのフォームセットを作成しようとしています:Djangoのinlineformset_factoryと多対多分野

class Category(models.Model): 

    name = models.CharField(max_length=100, unique=True) 
    description = models.TextField(null = True, blank=True) 

class Recipe(models.Model): 
    title = models.CharField(max_length=100) 
    body = models.TextField() 
    user = models.ForeignKey(User) 
    categories = models.ManyToManyField(Category, null = True, blank = True) 

しかし、私はそうのように、フォームセットを実装しようとする任意の時間:

FormSet = inlineformset_factory(Category, Recipe, extra=3) 
     formset = FormSet() 

私が手カテゴリモデルにForeignKeyが存在しないことを示すエラーManyToManyFieldを使用してフォームセットを構築することも、何らかの方法でこの機能を複製することも可能ですか?

ありがとうございます!

答えて

2

ソースコードやドキュメントによると、唯一の外部キーの

ですから、あなたのモデルのためのフォームセットを作成したい場合は、

categories = models.ManyToManyField(Category, null = True, blank = True) 

categories = models.ForeignKey("Category", null = True, blank = True) 

にドキュメントを変更する必要があります。 https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#inline-formsets https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#more-than-one-foreign-key-to-the-same-model

Djangoのソースは:あなたは正しいよう

def inlineformset_factory(parent_model, model, form=ModelForm, 
          formset=BaseInlineFormSet, fk_name=None, 
          fields=None, exclude=None, 
          extra=3, can_order=False, can_delete=True, max_num=None, 
          formfield_callback=None): 
    """ 
    Returns an ``InlineFormSet`` for the given kwargs. 

    You must provide ``fk_name`` if ``model`` has more than one ``ForeignKey`` 
    to ``parent_model``. 
    """ 
+1

うん、そうです。私は独自のinitとsaveメソッドでカスタムフィールドを作成することでこれを回避しようとしています。 – bento

+0

@bento、これは古くから分かっていますが、回避策を講じましたか?私はあなたと同じ状況にあり、あなたがそれをどのように解決したかを知りたいと思います。 – vleong

+0

私はずっとDjangoを使って以来、残念なことに、私は何をしたのか本当に覚えていません。ごめんなさい! – bento

関連する問題