Невозможно назначить "nimaaram": "Food.user" должен быть экземпляром "User" в Django - PullRequest
1 голос
/ 21 июня 2020

У меня есть такая модель еды:

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", как я могу сохранить свою форму другим способом? Мне нужно, чтобы пользователь в модели питания заполнял автоматически (имя пользователя)

1 Ответ

2 голосов
/ 21 июня 2020

Атрибуту user должен быть присвоен объект User, а не его username, поэтому:

class addFood(forms.Form):
    
    # …
    
    def save(self,request):
        data = self.cleaned_data
        food = Food.objects.create(
            <b>user=request.user</b>,
            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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...