Django: Как отобразить варианты голосования, соответствующие вошедшему в систему пользователю
Работаю над своим первым проектом Django. Я пытаюсь отобразить запись модели Result, которая была предварительно создана специально для вошедшего в систему пользователя и в которой этот пользователь/лицо, принимающее решение, может увидеть решение, за которое ему поручено проголосовать, а также соответствующие варианты, из которых он должен выбрать один.
Код, приведенный ниже, "работает" - но есть 2 проблемы, связанные со строкой forms.py:
result_instance = Result.objects.create(decision_id=22)
Первая проблема заключается в том, что я непреднамеренно создаю новую запись в модели Result, используя свойство "create" - когда я просто хочу обновить существующую запись Result (т.е. запись зарегистрированного пользователя, содержащую его назначенное решение/выбор, которые, в свою очередь, являются внешними ключами из модели Decision).
Вторая проблема заключается в том, что параметр "decision_id"=22, очевидно, имеет статическое значение и должен быть изменен, чтобы динамически ссылаться на решение, которое было предварительно назначено вошедшему пользователю в его "личной" записи Result.
Я думаю, что мне нужно передать назначенное решение зарегистрированного пользователя из views.py в forms.py - но не уверен, как это сделать.
Надеюсь, есть решение, которое устранит обе проблемы. Спасибо!
models.py
class Decision(models.Model):
custom_user = models.ForeignKey(CustomUser, default=None, null=True,
on_delete=models.SET_NULL)
summary = models.CharField(default="", verbose_name="Decision")
option1 = models.CharField(default="")
option2 = models.CharField(default="")
class Result(models.Model):
custom_user = models.ForeignKey(CustomUser, default=None, null=True,
on_delete=models.SET_NULL)
decision = models.ForeignKey(Decision, default=None, null=True,
on_delete=models.SET_NULL)
vote = models.CharField(default="", blank=True)
views.py
class VoteForm(LoginRequiredMixin, CreateView):
model = Result
form_class = VotingForm
template_name = 'users/vote_form.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['Result'] = Result.objects.all()
* create variable for filtering on the html page
context['user_specific'] = Result.objects.filter
(custom_user=self.request.user)
return context
forms.py
result_instance = Result.objects.create(decision_id=22)
Vote = [('1', result_instance.decision.option1),
('2', result_instance.decision.option2),
]
class VotingForm(forms.ModelForm):
class Meta:
model = Result
fields = ['decision', 'vote']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["vote"] = forms.ChoiceField(
widget=forms.RadioSelect(), choices=Vote, required=False)