使用自定义小部件覆盖默认的Django字段

时间:2018-01-30 03:02:58

标签: python django django-forms

我在Ubuntu上使用Django 1.11.9,具有这样的应用程序结构:

VisitorTrackingApp
|
 ---> admin.py
 ---> forms.py
 ---> models.py
 ---> static
      |
       ---> textboxes.css
 ---> templates
      |
       ---> index.html
       ---> signin.html
 ---> views.py
 ---> widgets.py

在我的models.py中,我定义了一个模型Visitors,其中包含属性Company(以及其他许多内容):

class Visitors(models.Model):
    Company = models.CharField(max_length = 50, blank = True)

widgets.py中,我定义了一个自定义小部件,如:

from django import forms

class TextWidget(forms.TextInput):
    class Media:
        css = {'all': ('textboxes.css',)}

然后我把它放在forms.py

from django.forms import ModelForm

from models import Visitor
from widgets import TextWidget

class VisitorsForm(ModelForm):
    class Meta:
        model   = Visitors
        fields  = ('VisitorType', 'FirstName', 'LastName', 'Company', 'Phone', 'Email')
        widgets = {'Company': TextWidget(),}

所有这一切都没有错误地执行。但我基于Django文档herehere的理解是因为我有widgets = {'Company': TextWidget(),},那么Company应根据textboxes.css中的CSS进行渲染,但是它不是。当我做这样的理智检查时:

t = TextWidget()
print >>sys.stderr, t.media

看看我的Apache日志,我发现我的自定义小部件确实有我的CSS文件的正确路径!

Django widget override template的帖子得到了我的要求,但他似乎正在使用HTML模板来定义他的自定义小部件?不知道这里发生了什么,任何帮助表示赞赏。谢谢!

0 个答案:

没有答案