Eu tenho um modelo que tem um ManyToManyField
para usuários e quero registrar o usuário conectado quando ele / ela envia o formulário em Choice
modelo, mas esse código está me impedindo de fazê-lo. Eu usei o login_required
decorador para forçar o usuário a fazer login primeiro (é isso que eu realmente quero).
models.py:
from django.db import models
from django.contrib.auth.models import User
QUESTION_CHOICES = (
("choice_1", "Choice 1"),
("choice_2", "Choice 2"),
("choice_3", "Choice 3"),
)
class Choice(models.Model):
users = models.ManyToManyField(User)
choices = models.CharField(max_length=256, choices=QUESTION_CHOICES, unique=True)
vote = models.IntegerField(default=0)
def __str__(self):
return self.choices + " " + "-" + " " + str(self.vote)
views.py:
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Choice
@login_required
def index(request):
food = request.POST.get("sunday")
user_v = None
get_choices = Choice.objects.values("choices", "vote")
new_choices = list(get_choices)
for q in new_choices:
choice = q["choices"]
vote_v = q["vote"]
if food:
if food == choice:
if request.user.is_authenticated():
user_v = request.user
print(user_v) # it prints out correctly after sucessful form submit
vote_v += 1
model_conn = Choice.objects.get(choices=choice)
model_conn.vote = vote_v
model_conn.users = user_v # this is where I get an error
model_conn.save()
return render(request, "index.html", {})
Respostas:
1 para resposta № 1Você está usando o campo ManyToMany para usuários, portanto, é necessário usar add
método para adicionar o usuário atual à lista de usuários:
model_conn.users.add(user_v)
Se você precisar limpar a lista de usuários relacionados primeiro, poderá usar clear
:
model_conn.users.clear()
model_conn.users.add(user_v)