2017-01-07 29 views
1

我正在嘗試使用日曆創建網頁。每個日曆都有事件。Django - 使用DetailView創建視圖

我試圖做一個窗體來添加一個事件到日曆。如果我們點擊某個日曆上的「添加新事件」,我們可以做到這一點。

所以,據我所知,我需要兩個視圖相結合 - DetailView(知道我們應該把我們的事件放在哪個日曆上)和CreateView。

這就是我正在做的:

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是一個類,而不是一個實例。據我所知,你有兩個模型:事件和日曆。事件具有日曆的外鍵。要使其工作,您應該創建一個日曆實例並將其傳遞到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?我懷疑這可能是一個bug的來源,除非你使用中間件來解決這個問題。 (request.user因爲你可能在這個文檔中看到由Django Middleware增加。

你應該添加日曆作爲默認值,請參閱this question如何做到這一點。