对于基数为10的int()的无效文字:“但是看不到为什么访问一个整数 [英] "invalid literal for int() with base 10:" But can't see why it is accessing an integer

查看:133
本文介绍了对于基数为10的int()的无效文字:“但是看不到为什么访问一个整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看不到为什么在我的应用程序中我收到这个错误。因为所有主键都是整数。这是我的代码:

forms.py

I can't see why in my application i am getting this error. As all primary keys are text fields are integers. Here is my code:
forms.py

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

models.py

models.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')

view.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})

我看不到为什么我收到这个错误。确切的错误是:

I cannot see why I am getting this error. The exact error is:

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

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

感谢提前,

Dean

RedirectTest is a Talk that I created with my form for the add talk to check that redirection was working correctly. The line of code that it is saying is causing the problem is ea.save()
Thanks in Advance,
Dean

推荐答案

考虑行

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

您正在创建一个模型实例 Event_Attendance 。构造函数希望第一个参数是 Talk 的实例。相反,您正在为它提供一个字符串,这是 的标题。

You are creating an instance of the model Event_Attendance. The constructor expects the first argument to be an instance of Talk. Instead you are supplying it with a string which is the title of the talk.

快速修复将是查找具有匹配标题的 Talk 实例,并将其作为参数传递给构造函数。这样的话:

A quick fix would be to look up the Talk instance with the matching title and pass it as an argument to the constructor. Something like this:

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

这会奏效,但不是最好的办法。对于一个,如果没有找到具有给定标题的 Talk ,则第一行总是可以提高 DoesNotExist 。第二,您直接访问 POST 变量,而不是使用 Form 来验证它们。

This will work but is not the best way to go about it. For one, the first line can always raise a DoesNotExist if a Talk with the given title is not found. Second you are accessing the POST variables directly rather than using the Form to validate them.

因此,更好的答案是:

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()

这篇关于对于基数为10的int()的无效文字:“但是看不到为什么访问一个整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆