0

これは私のコードですが、私は文書を読んできましたが、この方法は正しいと思われますが、エラーは出ませんが結果は見えません。誰かが私が間違っていることで私を助けることができますか?私のジェネリックなCreateViewの著者の選択肢のフィールドを、現在のユーザからのみ作成者(fk)で変更する方法はありますか?

class BookCreate(LoginRequiredMixin, CreateView): 
    model = Book 
    fields = ['title', 'isbn', 'year', 'author', 'publisher'] 


    def form_valid(self, form): 
     form.instance.owner = self.request.user 
     return super(BookCreate, self).form_valid(form) 

    def form_valid(self, form): 
     b = Book.objects.all 
     form.instance.author = ModelChoiceField(queryset=b.author_set.filter(owner=self.request.user)) 
     return super(BookCreate, self).form_valid(form) 
+0

よく分かりませんが、 'create_view'の' template'パラメータについて言及すべきではありませんか? – DeA

+0

@DeA自動的に世話をする – Stivi

答えて

0

単に、その後form_valid方法でそれを設定し、フィールドのリストからauthorを除外する方がはるかに簡単です:

class BookCreate(LoginRequiredMixin, CreateView): 
    model = Book 
    fields = ['title', 'isbn', 'year', 'publisher'] 

    def form_valid(self, form): 
     form.instance.owner = self.request.user 
     return super(BookCreate, self).form_valid(form) 

あなたがこれを行う場合は、必ずあなたが二form_valid方法を削除しますこれは上記の正しいform_validメソッドを置き換えています。

単一のオプションを持つフィールドとしてauthorを含める必要がある場合は、コードははるかに複雑です。 __init__メソッドを持つカスタムフォームが必要です。userがあり、authフィールドのクエリセットが設定されています。

次に、カスタムフォームを使用するようにビューを変更し、get_form_kwargsを無効にしてself.request.userを追加する必要があります。

関連する問題