在我的django项目中,我有一个显示事件详情的视图。在该视图中,有一个指向另一个视图的链接,该视图包含将人员注册到该事件的表单。
如果达到最大参与者数且有人仍尝试注册,我的视图会抛出异常。并从公式网站返回到事件站点。但是事件站点没有完全加载,我认为查询没有执行。
我不知道如何编写返回功能。
此外,我的异常中是否存在语法错误?当我在shell中创建新的注册实例时,我可以保存尽可能多的注册实例。
def validate_category_full(category_id):
cat = Category.objects.get(id=category_id)
regs = cat.registration_set.all()
if len(regs) >= cat.max_people:
raise ValidationError('Category is already full.')
def registration(request, category_id, event_id):
"""Add a new registration to a category."""
cat = Category.objects.get(id=category_id)
myevent = Event.objects.get(id=event_id)
if request.method != 'POST':
form = RegistrationForm()
else:
form = RegistrationForm(request.POST)
try:
validate_category_full(cat.id)
except(ValidationError):
return render(request, 'events/event.html',
{'myevent': myevent,
'error_message': 'Event is full.',})
else:
if form.is_valid():
reg = form.save()
return HttpResponseRedirect(reverse('events:category',
args=(cat.id,)))
context = {'form': form, 'cat': cat, 'myevent': myevent}
return render(request, 'events/registration.html', context)`
答案 0 :(得分:0)
由于我不知道你所说的“事件网站未满载”(并且假设“event-site”和“formular-site”真正意味着“事件页面”和“公式”页“):
首先:您不应该从另一个视图渲染模板,而是重定向到该视图。如果要将用户重定向回到另一个视图时向用户显示消息(在这种情况下为“事件已满”消息),请使用messages
framework:
来自django.contrib导入消息
def注册(request,category_id,event_id): #剪掉很多代码
try:
validate_category_full(cat.id)
except(ValidationError):
messages.error(request, 'Event is full.')
return redirect(your_event_view_name, whatever_args_it_takes)
注意我们为什么会这样做:
=>使用queryset.count()
代替len(queryset.all())
def validate_category_full(category_id):
cat = Category.objects.get(id=category_id)
regs = cat.registration_set.count()
if regs >= cat.max_people:
raise ValidationError('Category is already full.')
此外,由于您已经拥有该类别,因此您可能希望将其传递而不是category.id