2016-08-13 19 views
1

レポートを作成するときにユーザーが「オンザフライ」で場所を作成できるようにしたいと考えています。可能であれば、以下のモデルを使用してください。Django形式:ManyToManyインライン作成

モデル:

class Report(models.Model): 
    ... 
    location = forms.ManyToManyField(Location) 

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

私が探しています行動は、Djangoのフォームセットによって与えられたものに近いです。

実際、私は現時点では、代わりに外部キーの関係を使用し、フォームセットに頼っています。この技術を使用して、django-extra-viewsdjango-dynamic-formsetを追加することで、ユーザーが追加したい場所の数を選択できるようになりました。実際のセットアップの

ストリップダウンバージョン:

モデル:

class Report(models.Model): 
    ... 

class Location(models.Model): 
    name = forms.CharField(max_length=255) 
    report = forms.ForeignKey('Report') 

形式:

class LocationForm(forms.ModelForm): 
    class Meta: 
     model = Location 
     fields = '__all__' 

class LocationFormSet(extra_views.InlineFormSet): 
    model = TestLocation 
    form_class = TestLocationForm 

ビュー:

class ReportCreateView(extra_views.CreateWithInlinesView): 
    model = Report 
    inlines = [LocationFormSet, ] 

残念ながら、この設定を使用して、ロケーション重複した場所をたくさん持っている複数のレポートに属することはできません。だから私はManyToManyの関係がより適していると思います。私は中間モデルについて語ったこの質問に関連するいくつかの答えにつきましたが、私はそれを動作させるために自分でどこにでも行くことができませんでした。

私は多くの関係で動作するように自分の設定を調整する方法はありますか?あるいは、レポート作成中にユーザーが「オンザフライ」で場所を作成できるようにするには全く異なるアプローチがありますか?

ありがとうございます!

+0

ベストレスポンス:https://stackoverflow.com/a/21577368/1393774 – Virako

答えて

0

「オンザフライ」を作成するために、私はManyingManyをForeingKeyで変更しました。

class Report(models.Model): 
     ... 
     location = forms.ManyToManyField(Location) # REMOVE 

    class Location(models.Model): 
     report = models.ForeignKey(Report) # ADD 
     name = forms.CharField(max_length=255) 
     ... 

次に、InlineFormsが動作します。

+0

この方法では、場所を再利用できません。 – EsseTi

関連する問題