python - django - int 参数必须是字符串或数字,而不是 'Tuple'

标签 python django forms django-views tuples

我已经看了几个小时了,但我似乎无法理解为什么我会收到这条消息...

int() argument must be a string or a number, not 'tuple'

在我的 views.py 的这一行上(注意:异常实际上发生在 django 核心的更深一层,但我的代码行最终触发了异常)...

service_interest = ServiceInterest.objects.get_or_create(service = service, client = client)

为什么我会收到此错误?为了您的利益,请参阅下面的 models.py、forms.py 和 views.py 中的片段。

模型.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")

表单.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:', max_length=200, required=False)
  message = forms.CharField(max_length=10000, required=False, 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

来自 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)

最佳答案

get_or_create 返回一个元组,形式为(instance, created)。第二个参数告诉你它是否必须创建它,显然足够了。请改为执行以下操作:

client, created = Client.objects.get_or_create(name = name, email = email, site = url)

关于python - django - int 参数必须是字符串或数字,而不是 'Tuple',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797597/

相关文章:

python - 有效地检查矩形和圆的扇形之间的碰撞

python - 如何将用户名和密码代理添加到从 Azure 磁盘创建的 VM 中

JQuery 表单仅验证输入类型=文本或类型=密码

forms - 使用 Symfony 的 Form Event 删除一些发送到表单的数据

python - 从 pandas.core.series.Series 中删除前导零

python - 如何更改 Visual Studio Code 中的解释器?

python - Django 1.4 静态文件问题并且不在我项目的其他 url 上呈现

python - Django-piston 的读取响应时间很长

python - 运行collectstatic时Django-pipeline找不到文件或目录

Javascript 单选按钮验证错误弹出不到一秒钟,但不应消失