/ / 'User' objeto não é iterável no Django 1.11.8 - django, django-models, django-views

Objeto 'User' não é iterável no Django 1.11.8 - django, django-models, django-views

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 № 1

Você 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)