【发布时间】:2009-08-21 00:52:57
【问题描述】:
我正在尝试制作一个 Django 应用程序来处理事件。下面的视图处理已创建事件的编辑。
@login_required
def event_admin(request, event_id):
event = get_object_or_404(Event, pk=event_id)
if request.method == 'POST' and request.user == event.organiser:
event_form = EventAdminForm(request.POST, instance=event)
if event_form.is_valid():
event_form.save()
return HttpResponseRedirect(reverse('event_event_detail',
args=(event.id, )))
elif request.user == event.organiser:
event_form = EventAdminForm(instance=event)
return render_to_response('events/event_admin.html',
{'event_form': event_form, 'event': event},
context_instance = RequestContext(request))
return HttpResponseRedirect(reverse('event_event_detail', args=(event.id, )))
编辑现有事件时,现有事件保持不变,而使用所做更改创建新事件。有人可以看到我做错了什么吗?非常感谢。
编辑:
如果有帮助,这里是 forms.py 的相关部分。
class EventAdminForm(ModelForm):
start_time = forms.DateTimeField(widget=SplitSelectDateTimeWidget(
minute_step=5, second_step=60, years=range(2009, 2015)),
initial=datetime.datetime.now())
end_time = forms.DateTimeField(widget=SplitSelectDateTimeWidget(
minute_step=5, second_step=60, years=range(2009, 2015)),
initial=datetime.datetime.now())
def clean(self):
cleaned_data = self.cleaned_data
start_time = cleaned_data.get('start_time')
end_time = cleaned_data.get('end_time')
# The start of an event cannot be after the end.
if start_time > end_time:
raise forms.ValidationError(u'The end of an event can not be before the start.')
return cleaned_data
class Meta:
model = Event
exclude = ('attendees', 'organiser', )
【问题讨论】:
-
你没有对重写 save() 方法感到困惑吗?如果是,显示表单定义
-
不,save() 没有改变。如果这会有所作为,我已经覆盖了 clean()?
-
不是,除非您有可能清除了主键值。如果它在验证过程中丢失了 pk,它将创建另一个实例。
标签: django django-models django-forms