我收到以下错误:
视图KSUvity.authentication.views.registerAttendee未返回HttpResponse对象。它返回了None
我认为这是因为我的功能存在逻辑错误。我有几个if和else语句来检查几个条件。
这是views.py中的函数:
def registerAttendee(request,pk):
act = Activity.objects.get(pk=pk)
act.save()
attendee, _ = Attendee.objects.get_or_create(student=request.user)
volunteer = Volunteer.objects.filter(student=request.user)
ActvsStudentAttending=Activity.objects.filter(attendee=attendee)
ActvsStudentVolunteering=Activity.objects.filter(volunteer=volunteer)
if act.volunteer.filter(student=request.user).exists():
messages.error(request, 'You\'re already registered as a volunteer for this activity!', extra_tags='alert')
return redirect('home/#work')
elif act.attendee.filter(student=request.user).exists():
messages.warning(request, 'You\'re already registered as an attendee for this activity!', extra_tags='alert')
return redirect('home/#work')
elif ActvsStudentAttending.exists():
for x in ActvsStudentAttending:
if x.startDate.date() == act.startDate.date():
messages.error(request, 'You\'re already registered in the '+x.title+' activity that is held on the same day as '+act.title+'!', extra_tags='alert')
return redirect('home/#work')
elif ActvsStudentVolunteering.exists():
for x in ActvsStudentVolunteering:
if x.startDate.date() == act.startDate.date():
messages.error(request, 'You\'re already registered in the '+x.title+' activity that is held on the same day as '+act.title+'!', extra_tags='alert')
return redirect('home/#work')
else:
act.attendee.add(attendee)
messages.success(request, 'You\'re successfully registered as an attendee!', extra_tags='alert')
return redirect('home/#work')
是因为for循环中的内部if而引发错误?如果是,我该如何解决?我没有其他的这些案件,所以我不知道我在这里缺少什么。我必须检查所有条件,然后才能进入最终将其添加到模型中的其他条件。
我是Django和Python的新手,所以请原谅。
这就是我在models.py中所拥有的:
class Activity(models.Model):
type = models.CharField(max_length=50, default="")
title = models.CharField(max_length=200, default="")
description = models.CharField(max_length=500)
owner = models.ForeignKey(User, related_name="owner")
college = models.CharField(max_length=200)
location = models.CharField(max_length=200)
room = models.CharField(max_length=200)
startDate = models.DateTimeField(null=True, blank=True)
endDate = models.DateTimeField(null=True, blank=True)
attendee = models.ManyToManyField(Attendee, related_name="attendees",null=True, blank=True)
volunteer = models.ManyToManyField(Volunteer, related_name="volunteers",null=True, blank=True)
class Attendee(models.Model):
student = models.ForeignKey(User, related_name="attendee")
class Volunteer(models.Model):
student = models.ForeignKey(User, related_name="volunteer")
删除else
并取消其代码块。这将确保如果您的代码进入早期的elif
块之一但从未在循环中传递内部if
条件,则始终执行代码的这一部分:
if ...:
# ...
elif ...:
# ...
# remove the 'else', so that this will always run if your view function
# did not return from any of the earlier '[el]if' blocks
act.attendee.add(attendee)
messages.success(request, 'You\'re successfully registered as an attendee!', extra_tags='alert')
return redirect('home/#work')