0

だから、私はDjangoの汎用ビューを持っています:

class Foobaz(models.Model):
    name = models.CharField(max_length=140)
    organisation = models.ForeignKey(Organisation)


class FoobazForm(forms.ModelForm):
    class Meta:
        model = Foobaz
        fields = ('name')


class FoobazCreate(CreateView):
    form_class = FoobazForm

    @login_required
    def dispatch(self, *args, **kwargs):
        return super(FoobazCreate, self).dispatch(*args, **kwargs)

私がやろうとしているのは、URL から組織 ID を取得することです。

/organisation/1/foobaz/create/

そして、それを作成したオブジェクトに追加します。でこれを実行できることはCreateView.form_valid()わかっていますが、私が理解していることから、これは完全に検証されていません。

追加しようとしましたget_form_kwargs()が、含まれているフィールドにないため、組織の kwarg は想定されていません。

理想的には、それをフォームのインスタンスに追加して、残りの部分で検証することです-それが有効な組織であること、および問題のユーザーが新しいフーバズを追加するための正しい権限を持っていることを確認します.

それがこれを行う最善の方法である場合、私は自分の見解を転がして喜んでいますが、単にトリックを見逃しているだけかもしれません.

ありがとう!

4

2 に答える 2

0

フィールドを含めてorganisation、非表示で読み取り専用として定義する方が良いと思います。このようにして、djangoが検証します。

get_queryset次に、次のようにメソッドをオーバーライドできます。

def get_queryset(self):
    return Foobaz.objects.filter(
        organisation__id=self.kwargs['organisation_id'])

whereorganisation_idは URL パターンのキーワードです。

于 2013-10-13T11:14:32.610 に答える