“以 10 为基数的 int() 的文字无效:”但不明白为什么它要访问整数

2024-05-11

我不明白为什么在我的应用程序中出现此错误。由于所有主键都是文本字段,因此都是整数。这是我的代码:

forms.py

 class EventAttendForm(forms.Form):
     talk = forms.ModelChoiceField(queryset=Talk.objects.all())
     membersAttended = forms.ModelMultipleChoiceField(queryset=Member.objects.all())

模型.py

 class Talk(models.Model):
     title = models.CharField(max_length=200, primary_key=True)  
 class Member(models.Model):
     name = models.CharField(max_length=200)
     membership_number = models.CharField(max_length=200, primary_key=True)
     talks = models.ManyToManyField(Talk, through='Event_Attendance')
 class Event_Attendance(models.Model):
     talk = models.ForeignKey('Talk')
     membersAttended = models.ForeignKey('Member')

views.py

 def addAttendance(request):
     #eventAttendanceForm
     if request.method == 'POST':
          eventAttendForm = EventAttendForm(request.POST)
      for member in request.POST['membersAttended']:
            ea = Event_Attendance(request.POST['talk'], member)
            ea.save()
    return HttpResponseRedirect('../../../talks/')      
else:
    eventAttendForm = EventAttendForm()
    return render_to_response('attendance/addAttendance.html',{'eventAttendForm': eventAttendForm})

我不明白为什么会收到此错误。确切的错误是:

 Exception Type:    ValueError
 Exception Value:   invalid literal for int() with base 10: 'redirectTest'

RedirectTest 是我使用表单创建的一个对话,用于添加对话以检查重定向是否正常工作。它所说的导致问题的代码行是ea.save().


考虑线路

ea = Event_Attendance(request.POST['talk'], member)

您正在创建模型的实例Event_Attendance。构造函数期望第一个参数是一个实例Talk。相反,您向它提供一个字符串,该字符串是演讲标题.

一个快速解决方法是查找Talk具有匹配标题的实例并将其作为参数传递给构造函数。像这样的事情:

talk = Talk.objects.get(title = request.POST['talk'])
ea = Event_Attendance(talk = talk, membersAttended = member)
ea.save()

这会起作用,但不是最好的方法。首先,第一行总是可以提出一个DoesNotExist if a Talk未找到给定标题。其次,您正在访问POST直接变量而不是使用Form来验证它们。

因此,更好的答案是:

eventAttendForm = EventAttendForm(request.POST.copy())
if eventAttendForm.is_valid():
    talk = eventAttendForm.cleaned_data['talk']
    membersAttended = eventAttendForm.cleaned_data['membersAttended']

    for member in membersAttended:
        ea = Event_Attendance(talk = talk, membersAttended = member)
        ea.save()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“以 10 为基数的 int() 的文字无效:”但不明白为什么它要访问整数 的相关文章

随机推荐