Поле «Многие ко многим» принимает всех пользователей, не выбранных

#python-3.x #django #django-models

#python-3.x #django #django-модели

Вопрос:

Я пытаюсь запретить пользователям многократное голосование. Итак, я хочу добавить пользователей в ManyToManyField объекта вопроса. Но когда я захожу к администратору, все пользователи добавляются в поле, а не проголосовавшие. Вот код моей модели

 class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    choice_number = models.IntegerField(default=2)
    category = models.CharField(max_length=50, default="comparison")
    users = models.ManyToManyField(User, blank=True)
    
    def subscribe(cls, current_user, new_vote):
        new_vote.users.add(current_user)
  

И вот функция для добавления пользователей в вопросы в views.py :

 def change_vote(request, instruction, pk):
    question = Question.objects.get(pk=pk)
    Question.subscribe(request.user, question)
  

Комментарии:

1. почему бы вам просто не использовать: question.users.add(request.user) ? Я не могу понять, какая ошибка может быть

2. На самом деле проблема не в части добавления. Когда я просто создаю модель без функции подписки, она все равно добавляет всех пользователей. Я хочу, чтобы ManyToManyField изначально было пустым, но для этого нужны все пользователи:(

3. Вы проверили в оболочке django?

4. Нет, и на самом деле я не знаю, как :/

5. python manage.py shell затем импортируйте модели и проверьте их содержимое для проверки

Ответ №1:

Используйте question.users.all() , чтобы получить users отношение к question