【问题标题】:Django int() argument must be a string, a bytes-like object or a number, not 'QueryDict'Django int() 参数必须是字符串、类似字节的对象或数字,而不是 'QueryDict'
【发布时间】:2017-01-11 01:12:24
【问题描述】:

我有一个显示表单并保存相同表单的视图。显示视图没有问题,但保存时出现以下错误:

int() 参数必须是字符串、类似字节的对象或数字,而不是 'QueryDict'

这是我的代码:

型号:

class Category(models.Model):
    name = models.CharField(max_length=100, db_index=True, unique=True)
    slug = models.SlugField(max_length=100, db_index=True, unique=True)
    user = models.ForeignKey(User, related_name='categories')

    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
            super(Category, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('wallet:category_details', args=[self.id])

查看:

@login_required
def category_create(request):
    user = request.user
    if request.method == 'POST':
        category_create_form = CategoryCreateForm(request.POST)
        if category_create_form.is_valid():
            new_category = category_create_form.save(commit=False)
            new_category.user = request.user
            new_category.save()
            return render(request, 'category/done.html')
    else:
        category_create_form = CategoryCreateForm()
    return render(request, 'category/create.html', {'category_form': category_create_form})

表格:

class TransactionCreateForm(forms.ModelForm):
    field_order = ['name', 'type', 'wallet', 'category', 'date', 'amount', 'notes', ]

    class Meta:
        model = Transaction
        fields = ('name', 'type', 'wallet', 'category', 'date', 'amount', 'notes',)

    def __init__(self, user, *args, **kwargs):
        super(TransactionCreateForm, self).__init__(*args, **kwargs)
        self.fields['wallet'] = forms.ChoiceField(
        choices=[(wallet, str(wallet)) for wallet in Wallet.objects.filter(user=user)])

我该如何解决?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您的表单的 __init__ 方法指定了一个 user 参数,您在实例化它时没有提供该参数。创建您的表单:

    category_create_form = CategoryCreateForm(user)
    

    或者,在POST 分支中,

    category_create_form = CategoryCreateForm(user, request.POST)
    

    好吧,假设实际的类看起来像您发布的不同名称的表单类。基本上,看看你的表单需要什么参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多