我正在尝试制作一个包含日历的网页。每个日历都有活动。
我正在尝试创建一个表单来向日历添加事件。如果我们点击某个日历上的“添加新活动”,我们就可以做到这一点。
所以,据我所知,我需要结合两个视图 - 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 :(得分:0)
可能它不起作用,因为self.model
是一个类,而不是一个实例。据我所知,你有两个模型:事件和日历。事件具有日历的外键。要使其工作,您应该创建一个日历实例并将其传递到form.instance.calendar
。也许,你应该在get_context_data
:
context['calendar'] = Calendar.objects.get(1)
答案 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。