我是Django新手,正在寻找我刚刚编写的代码的最佳实践(见下文)。代码当前存在于我的视图.py只是创造了一个新的事件。如果你知道我的意思的话,熟悉其他语言只会让你“难闻”。有人能指出他们将如何完成这个简单的任务吗。在
再次查看我的代码(再多读一点文档)的唯一方法就是请求.用户进入模型.py保存功能。在
下面还有什么是新手犯的大错误吗?在
@login_required
def event_new(request):
# If we had a POST then get the request post values.
if request.method == 'POST':
form = EventForm(request.POST)
# Check we have valid data
if form.is_valid():
# If form has passed all validation checks then continue to save it.
city = City.objects.get(name=form.cleaned_data['autocompleteCity'])
category = form.cleaned_data['category']
event = Event(
name=form.cleaned_data['name'],
details=form.cleaned_data['details'],
date=form.cleaned_data['date'],
start=form.cleaned_data['start'],
end=form.cleaned_data['end'],
category=category,
city=city,
user=request.user,
)
event.save()
messages.add_message(request, messages.SUCCESS, 'Event has been created.')
return HttpResponseRedirect('/events/invite/')
else:
messages.add_message(request, messages.ERROR, 'Error')
context = {'form': form}
return render_to_response('events/event_edit.html', context, context_instance=RequestContext(request))
else:
form = EventForm
context = {'form': form}
return render_to_response('events/event_edit.html', context, context_instance=RequestContext(request))
我觉得这看起来很棒。你已经很好地遵循了文档中的约定。在
将
request.user
移动到模型肯定是一种反模式-视图函数将在请求/响应循环中提供服务,因此在这里访问这个属性是有意义的。模型不知道请求/响应,所以保持这些与任何视图行为分离是正确的。在{{cd2>只注意到了一个小变量。在
你应该读一读create forms from models。
ModelForm
类可以避免将字段从表单复制到模型中。在除此之外,这种观点在我看来很正常。在
您甚至可以使用泛型FormView或{a3}删除一些样板代码(
if request.method == "POST"
,if form.is_valid()
,等等)。由于您需要一些特殊的表单处理,所以它可能对您没有任何用处,但可能值得一看。在这段代码并不是100%完整的(缺少城市的特殊逻辑),但除此之外,它应该相当完整,并让您知道如何使用通用视图。在
在表单.py在
在视图.py在
^{pr2}$在网址.py在
相关问题 更多 >
编程相关推荐