У меня есть модель с пользовательским полем modelchoice.Избегайте свежих экземпляров полей modelform в django
class UserModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return obj.get_full_name()
class TaskForm(forms.ModelForm):
originator = UserModelChoiceField(queryset=User.objects.all().order_by('first_name'),widget=forms.Select(attrs={'class':'form-control'}))
class Meta:
model = Task
fields = ['originator']
Моего чтение показывает, что обработка моего поля таким образом, является переопределение любой информации из модели (например, является ли она или нет необходимости), потому что это инстанцирование его из моего определения, а не увеличение поля модели.
Кажется, что свести к минимуму моего изменения полей, как это я должен быть взаимодействующим с инициализацией вместо (см ниже)
def __init__(self,*args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
self.fields['originator'].queryset=User.objects.all().order_by('first_name')
self.fields['originator'].widget = forms.Select(attrs={'class':'form-control'})
Я понимаю, как это сделать QuerySet и виджет, предполагая, что выше является правильным. Мой вопрос заключается в том, как использовать этот настраиваемый выбор. Более того, я даже не уверен, что это способ сделать это, поскольку это кажется немного взломанным.
Большое спасибо за помощь. Ваше решение намного превосходит мой опыт. Я удивлен, что нет ничего встроенного, учитывая, что это настоятельно рекомендуется – Ewanw
@Ewanw Попробуйте добавить ветку 'elif' рядом с веткой' if model_field_type == django_models.CharField' и установить переменные 'form_field_type' и' attributes 'Соответственно –
И да, есть много примеров, когда я удивляюсь чему-то столь же популярному, как Django, похоже, не имеет хорошего решения, похожего на общие проблемы (и да, иногда проблемы, созданные по их собственным рекомендациям!) –