首页 > 解决方案 > 字段 'id' 需要一个数字,但得到了django中的错误

问题描述

我有这个表格:

class addMeal(forms.Form):
    name = forms.CharField(
        max_length=40,
        widget=forms.TextInput(attrs={'class':'form-control','placeholder':'نام وعده'})
    )
    foods = forms.ModelMultipleChoiceField(
        queryset=Food.objects.none(),
        widget=forms.SelectMultiple(attrs={'class':'form-control'})
    )
    def save(self,request):
        data = self.cleaned_data
        meal = Meals(name=data['name'],user=request.user,foods=data['foods'])
        meal.save()
    def __init__(self, user=None,*args, **kwargs, ):
        super().__init__(*args, **kwargs)
        if user is not None:
            self.fields['foods'].queryset = Food.objects.filter(user=user)

    class Meta:
            model = Meals

这个观点:

@login_required
def addmeal(request):
    if request.method == 'POST':
        form = addMeal(request.POST)
        if form.is_valid():
            form.save(request)
            return redirect('food:index')
    else:
        form = addMeal(user=request.user)      
    return render(request,'addmeal.html',{'form':form})

当我填写表格并按提交 django 时给我错误(字段 'id' 需要一个数字但得到 <QueryDict: {'csrfmiddlewaretoken': ['C2B8y3kLCa5IQ0S5Mvk7Tw0NTU4pNlYicppWlsIL1LCrcc8AuCQzjJkqWNUot4z6'], 'name': ['شام'], 'foods': ['1']}>.)。我该怎么做才能解决它?

标签: pythondjango

解决方案


由于user是第一个参数,因此您将数据作为第二个参数传递,因此:

@login_required
def addmeal(request):
    if request.method == 'POST':
        form = addMeal(user=request.user, data=request.POST)
        if form.is_valid():
            form.save(request)
            return redirect('food:index')
    else:
        form = addMeal(user=request.user)      
    return render(request,'addmeal.html',{'form':form})

推荐阅读