2011-07-18 40 views
0

型號:壓倒一切的Django的默認窗體呈現模板

class Subject(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(unique=True) 
    description = models.TextField(blank=True,null=True) 

形式:

class SearchTypeForm(forms.Form): 
    subject = forms.ModelChoiceField(queryset = Subject.objects.all()) 

瀏覽:

... 
context['search_type_form'] = SearchTypeForm() 
... 

模板:

{{search_type_form.subject}} 

在實際模板的搜索型形式呈現爲:

<select id="id_subject" name="subject"> 
<option selected="selected" value="">---------</option> 
<option value="1">subject 1</option> 
<option value="2">subject 2</option> 
... 
</select> 

在值字段(上面下拉列表中的)是相應的主題,如何換到其他領域一樣,是我們的ID想讓它成爲的slug字段。

回答

1

您可以通過specifiing「to_field_name」關鍵字參數像這樣覆蓋它:

from django import forms 

from some.models import Something 

class SomeForm(forms.Form): 
something = forms.ModelChoiceField(queryset=Something.objects.all(), 
            to_field_name="slug") 
1

這取決於模型的__unicode__方法。讓它返回slug

class Subject(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(unique=True) 
    description = models.TextField(blank=True,null=True) 

    def __unicode__(self): 
     return self.slug 
+0

感謝您的回答。但它不工作對我來說,這是給編號,即使我們已經給了'__unicode__' – Neo

+0

@saurabh哦,我誤解了你的問題。你想改變這個值。它始終是模型的主要關鍵。明確定義主鍵並將其用作值。無論如何,你爲什麼需要改變它? – DrTyrsa

+0

其實在ajax調用中我需要這個值,當我們使用jQuery val時,它只給出了這個值。無論如何,我明白你的觀點..非常感謝.. – Neo