Изменение типа поля в формах django
У меня есть модель для группы, которая имеет два поля: лидер и описание.
models.py
class Group(models.Model):
leader = models.ForeignKey(User, on_delete=models.CASCADE)
description = models.TextField()
forms.py
class GroupForm(forms.ModelForm):
class Meta:
model = Group
fields = ('leader', 'description')
Моя проблема заключается в том, что я хочу изменить тип поля для лидера. Сейчас по умолчанию это выпадающий список/выбор со всеми доступными пользователями в моей базе данных. Я не хочу, чтобы пользователи могли создавать группы по именам других пользователей. Вместо этого я хочу, чтобы поле лидера было полем TextInput и использовал javascript для изменения значения лидера на любое значение Users.username.
Итак, я добавил виджет, но теперь есть еще больше проблем:
forms.py
class GroupForm(forms.ModelForm):
class Meta:
model = Group
fields = ('leader', 'description')
widgets = {
'leader': forms.TextInput(attrs={'id': 'leader', 'type': 'hidden', 'value': ''})
}
Моя цель состояла в том, чтобы использовать тег скрипта в моем шаблоне django для getElementById('leader')
и изменить его значение на user.username
, сохраняя его скрытым от текущего пользователя.
Однако я продолжаю сталкиваться с трудностями, главная из которых заключается в том, что я не могу изменить тип поля для лидера с select на TextInput, поэтому каждый раз, когда я пытаюсь получить доступ к leader.value
, я получаю undefined.
Любая помощь будет полезна. Спасибо.
widgets
опция должна принадлежать форме Meta
, а не телу класса формы (docs):
class GroupForm(forms.ModelForm):
class Meta:
model = Group
fields = ('leader', 'description')
widgets = {
'leader': forms.TextInput(attrs={'id': 'leader', 'type': 'hidden'})
}
Я не уверен, что клавиша value
в виджете attrs
будет работать, это по меньшей мере очень странно. Если вы делаете это для получения пустой строки, то это не обязательно: по умолчанию input.value
является ''
, а не undefined
.