是否可以让Django表单字段将表单值表示为slugs(例如<input value="groceries">
)而不是ID(<input value="1">
)而不显着重写表单方法? slug在模型上可用(例如Category.slug)。
Forms.py:
from django import forms
from django.forms import ModelMultipleChoiceField, CheckboxSelectMultiple
from myproject.common.models import Category
class MyForm(forms.Form):
cats = ModelMultipleChoiceField(required=False, queryset=Category.objects.all(), widget=CheckboxSelectMultiple)
每个选项的当前HTML:
<label for="id_cats_0"><input type="checkbox" name="cats" value="1" id="id_cats_0" /> Groceries</label>
相反,我希望将HTML呈现为......
<label for="id_cats_0"><input type="checkbox" name="cats" value="groceries" id="id_cats_0" /> Groceries</label>
...我希望其余的Django表单功能正常工作。
也许我在做梦,但有没有一个选项可以让我指定一个除PK以外的字段来识别表单字段选项?我需要使用slug字段而不是ID来支持遗留搜索系统。提前谢谢。
答案 0 :(得分:1)
试试这个:
cats = ModelMultipleChoiceField(required=False, to_field_name='slug', queryset=Category.objects.all(), widget=CheckboxSelectMultiple)