🙆
[Django]FKのModelChoiceFieldの選択肢がObjectになる
概要
ChoiceFieldの項目をDBから取得する場合にテンプレート側で選択肢がオブジェクトになる件の対応方法を紹介。
環境
Python 3.12.2
Django 5.0.2
現象
テンプレート(html)を表示すると、選択肢がオブジェクトになる。
例:MyRelatedClass Object(1)
対応方法
ModelChoiceFieldをオーバーライドして、label_form_instanceでobjectではなくobject.nameをreturnするよう変更
# forms.py
class CustomModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return obj.name
class xxForm(forms.ModelForm):
choicefield = CustomModelChoiceField(queryset=xxxxClass.objects.all(), empty_label='', required=True)
# views.py
class xxxView(CreateView):
def get(self, request, **kwargs):
form = xxxForm()
form.fields['xxx'].queryset = xxxx.objects.all().filter(xxx=self.request.user)
datas = {'form': form}
return render(self.request,self.template_name, datas)
# template
{% for object in object_list %}
<tr>
<td>{{ object.columnName.columnName }}</td>
Discussion