Я работаю над системой электронного голосования, в которой претенденты претендуют на определенные должности. Я пытаюсь создать форму, в которой кандидаты отображаются по позициям в кнопках RadioSelect.
Для этого я попытался инициализировать цикл for для всех объектов в классе Position() и использовал оператор if для сравнения текущего пути URL с get_absolute_url() каждого объекта. У меня проблемы с работой модуля запроса.
class VotingForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(VotingForm, self).__init__(*args, **kwargs)
def get_url(self):
self._ = []
for post in Position.objects.all():
if self.request.get_full_path() == "/post/pro":
no_ = Position.objects.get(post='PRO')
self._.clear()
for i in Aspirant.objects.filter(post=no_):
self._.append(tuple([i.name, i.name]))
elif self.request.get_full_path() == "/post/gen-sec":
no_ = Position.objects.get(post='General Secretary')
self._.clear()
for i in Aspirant.objects.filter(post=no_):
self._.append(tuple([i.name, i.name]))
return _
CHOICES = self.get_url()
aspirants = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect)
class Meta:
model = Aspirant
fields = ['aspirants']
Я получаю эту ошибку. Я не уверен, что я делаю неправильно.
CHOICES = self.get_url()
NameError: name 'self' is not defined
Вы должны были вызвать метод get_url()
внутри метода __init__()
класса VotingForm
Попробуй это,
class VotingForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(VotingForm, self).__init__(*args, **kwargs)
self.fields['aspirants'].choices = self.get_url() # change is here
def get_url(self):
self._ = []
for post in Position.objects.all():
if self.request.get_full_path() == "/post/pro":
no_ = Position.objects.get(post='PRO')
self._.clear()
for i in Aspirant.objects.filter(post=no_):
self._.append(tuple([i.name, i.name]))
elif self.request.get_full_path() == "/post/gen-sec":
no_ = Position.objects.get(post='General Secretary')
self._.clear()
for i in Aspirant.objects.filter(post=no_):
self._.append(tuple([i.name, i.name]))
return _
CHOICES = [] # change is here
aspirants = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect)
class Meta:
model = Aspirant
fields = ['aspirants']