python - 无法分配“'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'” 我如何以另一种方式保存我的表单?我需要自动填写食物模型中的用户(用户名)
解决方案
该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
推荐阅读
- c++ - CMake 添加 fmt 库
- azure - 逻辑应用存储 Blob 仅在新 Blob 上触发
- oracle - 如何使用 EF Core 5 执行存储过程 ORACLE?
- java - 具有空值的 Micronaut SwaggerConfiguration URiConfig
- vue.js - 为什么使用vue文件时vs code不关闭括号,括号和方括号?
- vba - 从 SAP 报告中获取单元格的值
- plugins - 为什么“玩家”会变红-Spigot Development
- c++ - Rad studio (C++) 10.4,链接错误:[ilink64 错误] 致命:检测到错误 (BPI323)
- php - TYPO3 查看页面内容
- encryption - 使用 openssl 解密 json 文件 aes-128-ctr