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 动态模型

Django - 评级模型示例 DetailView 模板

Django DetailView/ListView 强制 XML 渲染

在 Django 1.5 中结合 CreateView 和 DetailView

Django - DetailView 中的 DateTimeField

Django 通用视图:何时使用 ListView 与 DetailView