2017-01-07 1 views
1

私はカレンダーでWebページを作ろうとしています。すべてのカレンダーにイベントがあります。Django - DetailViewを使ったCreateView

予定をカレンダーに追加するためのフォームを作成しようとしています。特定のカレンダーで「新しいイベントを追加」をクリックすると、これを行うことができます。

私が理解するように、DetailView(イベントを配置するカレンダーを知るために)とCreateViewの2つのビューを組み合わせる必要があります。

class EventCreate(CreateView): 
model = Event 
form_class = EventForm 
success_url = '/prijavljen/' 

def form_valid(self, form): 
    form.instance.calendar = self.request.calendar 
    return super(EventCreate, self).form_valid(form) 

def get_context_data(self, *args, **kwargs): 
    context = super(EventCreate, self).get_context_data(*args, **kwargs) 
    context['calendar'] = self.model 
    return context 

しかし、それは働いていない私はそれをクリックしたときに、私はイベントカレンダーを得ることはありません:

これは私がこれを作ってるんだかです。

ご協力いただければ幸いです。

答えて

0

self.modelはインスタンスではないため、おそらく動作しません。私が理解する限り、イベントとカレンダーの2つのモデルがあります。イベントにカレンダーへの外部キーがあります。それを動作させるには、カレンダーインスタンスを作成してform.instance.calendarに渡す必要があります。おそらく、あなたはget_context_dataにこのような何かを行う必要があります:あなたが投稿ビューで

context['calendar'] = Calendar.objects.get(1) 
0

を、self.modelはラインmodel = Eventを意味し、あなたがイベントではなく、カレンダーにcontext['calendar']を設定しようとしています。 self.request.calendarが実際にカレンダーモデルのインスタンスであるかどうかを確認する必要があります。その場合は、context['calendar'] = self.request.calendarを試してください。

ただし、どのように設定していますかself.request.calendar?あなたがミドルウェアを使ってそれを解決していない限り、それがバグの原因かもしれないと私は思っています。あなたはおそらくドキュメントで見たように(request.userDjango Middlewareによって追加される。

あなたはそれを行う方法について this questionを参照して、デフォルト値としてカレンダーを追加する必要があり

関連する問題