Django表单字段:除了PK之外还将字段值表示为模型字段?

时间:2012-02-09 20:15:17

标签: django django-forms

是否可以让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来支持遗留搜索系统。提前谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

cats = ModelMultipleChoiceField(required=False, to_field_name='slug', queryset=Category.objects.all(), widget=CheckboxSelectMultiple)