Я хочу, чтобы выпадающее меню было заполнено результатами запроса в моей форме для моего поля coach_id. Я хочу, чтобы пользователь мог выбрать один вариант, а не несколько. Я пытаюсь использовать ModelMultipleChoiceField ... неудачно .....Выберите поле в форме на основе запроса в той же модели
class PersonForm(forms.ModelForm):
coach_id = forms.ModelMultipleChoiceField(queryset=Person.objects.filter(assign_as_coach="Person is a coach"), widget=forms.Select())
class Meta:
model = Person
fields = [ 'id', 'first_name', 'surname', 'email', 'coach_id', 'assign_as_coach', 'position', 'contract_type']
# exclude = ['initials', 'sam']
labels = {
'first_name': _('First Name'),
'surname': _('Surname'),
'email': _('Email'),
'coach_id': _('Select Coach'),
'assign_as_coach': _('Assign as a coach?'),
'position': _('Position'),
'contract_type': _('Contract Type'),
}
widgets = {
'first_name': forms.TextInput(
attrs={'placeholder': 'First Name', 'id': 'person-first-name'}
),
'surname': forms.TextInput(
attrs={'placeholder': 'Surname', 'id': 'person-surname'}
),
'email': forms.TextInput(
attrs={'placeholder': 'Email Address', 'id': 'person-email'}
),
# 'coach_id': forms.Select(
# attrs={'placeholder': 'Select Coach', 'id': 'person-coach-id'}
#),
'assign_as_coach': forms.Select(
attrs={'placeholder': 'Assign person as a coach?', 'id': 'person-is-coach'}
),
'position': forms.TextInput(
attrs={'placeholder': 'Current position', 'id': 'person-position'}
),
'contract_type': forms.Select(
attrs={'placeholder': 'Select Contract Type', 'id': 'person-contract'}
),
Вот моя модель:
class Person(models.Model):
FT = "Full-Time"
PT = "Part-Time"
C = "Contract"
Z = "Zero hours"
CONTRACT_CHOICES = (
(FT, "Full-Time"),
(PT, "Part-Time"),
(C, "Contract"),
(Z, "Zero hours"),
)
Y = "Yes"
N = "No"
IS_COACH_CHOICES = (
(Y, "Person is a coach"),
(N, "Person is NOT a coach"),
)
first_name = models.CharField(max_length=15, default='')
surname = models.CharField(max_length=30, default='')
initials = models.CharField(max_length=5, default='', null=True, blank=True)
email = models.EmailField(default='', null=True, blank=True)
coach_id = models.IntegerField(null=True)
assign_as_coach = models.CharField(null=True, blank=True, choices=IS_COACH_CHOICES, default="Person is NOT a coach", max_length=5)
position = models.CharField(max_length=30, default='', null=True, blank=True)
contract_type = models.CharField(max_length=30, default='FT', choices=CONTRACT_CHOICES)
user_name_check = models.CharField(max_length=30, default='', null=True, blank=True)
def __unicode__ (self):
return self.surname + ', ' + self.first_name
На данный момент у меня есть coach_id выбора поля рендеринга на шаблоне, который ничего не имеет и плохо отформатирован.
Если вы хотите выбрать только один вариант, почему вы используете поле с несколькими вариантами выбора? –
Я читал по другому вопросу, что самый простой способ фильтрации на основе запроса - использовать ModelMultipleChoiceField, поэтому я просто вслепую вскочил, не думая об этом - я использовал несколько месяцев, так голый со мной. То, что я на самом деле хочу, является полем выбора, но я не могу понять, как основывать выбор с помощью набора запросов, когда результаты запроса могут отличаться каждый раз, когда кто-то открывает форму. –
Мой ответ ниже похож на другой вопрос Я ответил ранее: http://stackoverflow.com/questions/41934040/django-cannot-assign-ujoan-manel-despesa-nomtreballador-must-be-a-trebal –