2015-09-05 22 views
0

所以正如標題所說,我試圖縮小Django頁面上幾個字段的寬度。它主要是CharField,DecimalFieldIntegerField如果這有什麼區別。Django - 指定django.db.models的寬度(???)字段形式

這裏是

title = models.CharField(max_length=200) 

我發現他人已經使用的小部件,但沒能得到它的工作,一方面是因爲我不清楚如何使用這些,也許還因爲這些字段的一個示例例子似乎都使用django.forms.CharField。這裏是這樣的鏈接an example。我想這樣的這樣一個例子:有import django.db.modelsimport django.forms

這裏是我更新的文件

title = models.CharField(max_length=200, widget=models.Textarea(attrs={'cols': 10, 'rows': 20})) 

title = models.CharField(max_length=200, widget=forms.Textarea(attrs={'cols': 10, 'rows': 20})) 

而且

models.py

class ChemRun(forms.Form): 
    title   =  forms.CharField(max_length=50, widget=forms.TextInput(attrs={'style': 'width: 400px;' })) 
    created_date =  forms.DateTimeField(initial=timezone.now) 
    status   =  forms.CharField(max_length=20, initial="In queue") 

forms.py

class ChemRunForm(forms.Form): 
    class Meta: 
      model = ChemRun 
      exclude = ('created_date', 'status') 

views.py

@verified_email_required 
def create(request): 
    if request.POST: 
      form = ChemRunForm() 
      f = form.save(commit=False) 
      f.owner = request.user 
      f.save() 
      data = form.cleaned_data 
      initiate_run.delay(data) 
      return HttpResponseRedirect('/accounts/profile') 
    else: 
      form = ChemRunForm() 

    args = {} 
    args.update(csrf(request)) 
    args['form'] = form 

    return render_to_response('interface/newrun.html', args, context_instance=RequestContext(request)) 
+0

是否真的重要?它將在底層SQL中被定義爲「title」varchar(200)NOT NULL。既然它是一個varchar,即使縮小它也不會影響太大。 http://stackoverflow.com/questions/1962310/importance-of-varchar-length-in-mysql-table –

回答

1

你可以將它的一些方法...

你可以做到這一點,而不必定義窗口小部件並只需設置html'樣式'屬性元素

選項1

class MyForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyFormForm, self).__init__(*args, **kwargs) 
     self.fields['title'].widget.attrs['style'] = "width:200px" 

選項2

class MyForm(forms.ModelForm): 
    class Meta: 
     model = Foo 
     'widgets' = { 
      'title' = forms.CharField(attrs={'size':'80'}), 
     } 

選項3

class MyForm(forms.ModelForm): 
     title = models.CharField(max_length=200, widget=forms.CharField(attrs={'size':'80'}) 
+0

謝謝你的答案。這現在使用forms.modelForm和forms.CharField,而我使用models.ModelForm和models.CharField。 我還沒有真正理解models.ModelForms和forms.ModelForms之間的區別,我一直不願意改變,因爲它可能會導致更多的問題。 有沒有辦法做到這一點使用models.ModelForm,還是更好,我改變到forms.ModelForm? – Tobias

+0

所以表單可以是綁定的也可以是非綁定的。您正嘗試使用綁定表單,因爲您正在使用'models.CharField' - 在這裏閱讀更多關於它的信息http://www.effectivedjango.com/forms.html。所以你可以這樣想:'models.CharField'處理數據組件,而'forms.CharField'則可以處理未綁定的表單,還可以處理窗口小部件,標籤,幫助文本等......基本上這些表單是如何呈現的。 –

+0

好的,我想我已經掌握了它的基礎知識,謝謝。現在,我得到新的錯誤,而不是'類型錯誤:「DeclarativeFieldsMetaclass」對象不iterable' – Tobias