我一直在看这几个小时,我似乎无法理解为什么我收到这条消息……
int() argument must be a string or a number,not 'tuple'
@H_301_8@从我的views.py这一行(注意:异常实际上发生在django核心内部更深层次,但这是我的代码行,最终触发了异常)…
service_interest = ServiceInterest.objects.get_or_create(service = service,client = client)
@H_301_8@为什么我收到此错误?为了您的利益,请参阅以下models.py,forms.py和views.py中的代码段.
models.py:
class Client(models.Model): name = models.CharField(max_length=100) email = models.EmailField() site = models.URLField() contact_date = models.DateField(default = datetime.date.today()) class Service(models.Model): name = models.CharField(max_length=200) class ServiceInterest(models.Model): service = models.ForeignKey('Service') client = models.ForeignKey('Client') class Meta: unique_together = ("service","client")
@H_301_8@forms.py …
class ContactForm(forms.Form): SERVICE_CHOICES = ( ('first_choice','Description of first choice'),('second_choice','Description of second choice'),('third_choice','Description of third choice'),('other','Other') ) SERVICE_CHOICES_DICT = dict(SERVICE_CHOICES) name = forms.CharField(label='What would you like us to call you?',max_length=200,required=False) email = forms.EmailField(label='What is your email address?',help_text='Ex: yourname@gmail.com') url = forms.URLField(label='If you have a website,please provide a link',required=False,help_text="Ex: www.yoursite.com") service_interest = forms.MultipleChoiceField(label="Please check all of the services you're interested in:",widget=forms.widgets.CheckBoxSelectMultiple,choices=SERVICE_CHOICES,required=True) other = forms.CharField(label='If you selected \"Other\",please specify:',required=False) message = forms.CharField(max_length=10000,label='Any other information you think we should know?',widget=forms.widgets.Textarea) def clean_other(self): cleaned_data = super(ContactForm,self).clean() if 'service_interest' in cleaned_data.keys(): options = cleaned_data['service_interest'] if 'other' in options: other_input = cleaned_data['other'] if other_input == None or len(other_input) == 0: raise forms.ValidationError('required when \"Other\" is checked') return cleaned_data
@H_301_8@来自views.py的相关代码:
name = form.cleaned_data['name'] email = form.cleaned_data['email'] url = form.cleaned_data['url'] interests = form.cleaned_data['service_interest'] other = form.cleaned_data['other'] message = form.cleaned_data['message'] client = Client.objects.get_or_create(name = name,email = email,site = url) for interest in interests: service = None if(interest != 'other'): service = Service.objects.get_or_create(name = ContactForm.SERVICE_CHOICES_DICT[interest]) else: service = Service.objects.get_or_create(name = other) # Appears to be responsible for the stack trace,even though exception # is one level deeper in... # /Library/Python/2.7/site-packages/django/core/handlers/base.py in get_response service_interest = ServiceInterest.objects.get_or_create(service = service,client = client)
@H_301_8@
最佳答案
get_or_create以(实例,已创建)的形式返回元组.第二个参数告诉你是否必须创建它,显然已经足够了.请执行以下操作:
client,created = Client.objects.get_or_create(name = name,site = url)
@H_301_8@