首页 > 解决方案 > 无法分配“'nimaaram'”:“Food.user”必须是 Django 中的“用户”实例

问题描述

我有一个像这样的食物模型:

class Food(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE) 
    name = models.CharField(max_length=155,default='')
    colorie = models.BigIntegerField(default=0)
    carbohidrat = models.IntegerField(default=0)
    cholestrol = models.IntegerField(default=0)
    fat = models.IntegerField(default=0)
    fiber = models.IntegerField(default=0)
    protein = models.IntegerField(default=0)
    saturatedfat = models.IntegerField(default=0)
    def __str__(self):
        return self.name

我有这样的食物形式:

class addFood(forms.Form):
    name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'نام غذا'}))
    colorie = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان انرژی بر حسب کیلو کالری'}))
    carbohidrat = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان کربوهیدرات بر حسب گرم'}))
    cholestrol = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان کلسترول بر حسب میلی گرم'}))
    fat = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان چربی بر حسب گرم'}))
    fiber = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان فیبر بر حسب گرم'}))
    protein = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان پروتئین بر حسب گرم'}))
    saturatedfat = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'میزان چربی اشباع شده بر حسب گرم'}))
    def save(self,request):
        data = self.cleaned_data
        food = Food(user=request.user.username,name=data['name'],colorie=data['colorie'],carbohidrat=data['carbohidrat'],cholestrol=data['cholestrol'],fat=data['fat'],fiber=data['fiber'],protein=data['protein'],saturatedfat=data['saturatedfat'])
        food.save()
    class Meta:
        model = Food

和 Views.py:

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

当我填写表格并按提交 django 时给我“无法分配“'nimaaram'”:“Food.user”必须是“用户”实例'错误。我该怎么做才能解决它?提示:食物表单中的 request.user.username 是“'nimaaram'” 我如何以另一种方式保存我的表单?我需要自动填写食物模型中的用户(用户名)

标签: pythondjango

解决方案


user属性应该被分配一个User对象,而不是它的username,所以:

class addFood(forms.Form):
    
    # …
    
    def save(self,request):
        data = self.cleaned_data
        food = Food.objects.create(
            user=request.user,
            name=data['name'],
            colorie=data['colorie'],
            carbohidrat=data['carbohidrat'],
            cholestrol=data['cholestrol'],
            fat=data['fat'],
            fiber=data['fiber'],
            protein=data['protein'],
            saturatedfat=data['saturatedfat']
        )
    class Meta:
        model = Food

推荐阅读