Не записываются данные в модель:
models.py
class game(models.Model): # игра
id = models.AutoField(primary_key=True)
name = models.CharField(max_length = 255)
cost = models.IntegerField(null=False, default="-1")
class CustomUser(models.Model): # Пользователь
id = models.AutoField(primary_key=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
email = models.EmailField(max_length=255, null=True)
nickname = models.CharField(max_length=255, null=True)
class rate(models.Model): # Рейтинг
id = models.AutoField(primary_key=True)
id_user = models.ForeignKey(CustomUser, on_delete=models.DO_NOTHING)
critic = models.BooleanField()
score = models.IntegerField(null=False)
id_game = models.ForeignKey(game, on_delete=models.DO_NOTHING)
views.py
def show_game(request, id):
product = game.objects.get(id=id)
current_user = User.objects.get(username=request.user.username)
cuser = CustomUser.objects.get(user_id=current_user.id)
ratee = rate.objects.get(id_game=product.id)
form_add_rate = AddRate(request.POST)
if request.method == "POST":
print(request.POST)
ratee.id_user = cuser.id
ratee.critic = True
ratee.score = request.POST.get('score')
ratee.id_game = product.id
ratee.save()
return render(request, 'game.html', locals())
forms.py
class AddRate(forms.ModelForm):
class Meta:
model = rate
fields = ["id_user", "critic", "score", "id_game"]
html-страничка
<p>Отзыв к игре {{ product.name }} от {{ cuser.id }}: </p>
<form method="POST">{% csrf_token %}
<p>
<label>Оценка</label><br>
<input type="hidden" name="idid" value="{{ cuser.id }}">
<input type="number" max="5" min="0" name="score" value="" />
</p>
<input type="submit" value="Сохранить" >
</form>
Добрый день. Возникла проблема, что при записи данных в таблицу вылезает ошибка Cannot assign "1": "rate.id_user" must be a "CustomUser" instance. В чем проблема и как ее исправить? При выводе product.id и cuser.id выводятся соответствующие правильные id.
Вопрос решен. В views.py после проверки POST необходимо удалить ratee.id_user = cuser.id
и ratee.id_game = product.id
. Всем спасибо.