Django - 使用 DetailView 创建视图
Posted
技术标签:
【中文标题】Django - 使用 DetailView 创建视图【英文标题】:Django - CreateView with DetailView 【发布时间】:2017-05-22 06:34:50 【问题描述】:我正在尝试制作带有日历的网页。每个日历都有事件。
我正在尝试制作一个表格来将事件添加到日历中。如果我们在某个日历上单击“添加新事件”,我们就可以做到这一点。
因此,据我了解,我需要结合两个视图 - 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
但它不起作用,当我点击它时我没有得到日历。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:在您发布的视图中,self.model
指的是model = Event
行,因此您尝试将context['calendar']
设置为事件,而不是日历。您需要检查self.request.calendar
是否实际上是一个日历模型实例,如果是,请尝试context['calendar'] = self.request.calendar
。
但是,您如何设置self.request.calendar
?我怀疑这可能是错误的根源,除非您使用中间件来解决这个问题。 (request.user
您可能在文档中看到由Django Middleware 添加。
您应该将日历添加为默认值,请参阅this question 了解如何执行此操作。
【讨论】:
【参考方案2】:可能它不起作用,因为self.model
是一个类,而不是一个实例。据我了解,您有两种模型:事件和日历。事件具有日历的外键。要使其工作,您应该创建一个日历实例并将其传递给form.instance.calendar
。也许,你应该在get_context_data
中做这样的事情:
context['calendar'] = Calendar.objects.get(1)
【讨论】:
以上是关于Django - 使用 DetailView 创建视图的主要内容,如果未能解决你的问题,请参考以下文章
Django DetailView/ListView 强制 XML 渲染
在 Django 1.5 中结合 CreateView 和 DetailView