Django CreateView与DetailVi

2024-06-28 20:02:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个有日历的网页。每个日历都有活动。在

我正在尝试制作一个窗体来将事件添加到日历中。如果我们点击某个日历上的“添加新事件”,我们就可以做到这一点。在

所以,据我所知,我需要两个视图组合在一起——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

但它不起作用,当我点击它的时候,我没有事件得到日历。在

任何帮助都将不胜感激。在


Tags: selfformdatagetmodelreturndefcontext
2条回答

在您发布的视图中,self.model引用了model = Event行,因此您试图将context['calendar']设置为事件,而不是日历。您需要检查self.request.calendar是否实际上是一个日历模型实例,如果是,请尝试context['calendar'] = self.request.calendar。在

但是,如何设置self.request.calendar?我怀疑这可能是bug的来源,除非您使用中间件来解决它。(request.user您可能在文档中看到的是由Django Middleware添加的。在

您应该将日历添加为默认值,请参见this question了解如何添加。在

可能是因为self.model是一个类,而不是一个实例。据我所知,你们有两种模式:活动和日历。事件具有日历的外键。要使其工作,您应该创建一个日历实例并将其传递到form.instance.calendar。也许,您应该在get_context_data中执行类似的操作:

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

相关问题 更多 >