【问题标题】:Define CSS style in Django model field在 Django 模型字段中定义 CSS 样式
【发布时间】:2013-08-04 10:34:00
【问题描述】:

假设我有以下代码:

文件models.py:

from django.db import models
from django.contrib.auth.models import User

class MyClass(models.Model):
   username = models.ForeignKey(User, blank=True, null=True)
   my_field = models.CharField(max_length=200, default="sample_field")

File views.py

from django.forms.models import inlineformset_factory
from django.contrib.auth.models import User
from myapp.models import MyClass

@login_required
def index(request):

    username = User.objects.get(username=request.user.username)

    MyClassFormSet = inlineformset_factory(User, MyClass, can_delete=False, extra=5)

    formset = MyClassFormSet(instance=username) 
    ...

在此处将 CSS 类添加到字段 my_field 的最简单方法是什么? (我在 SO 上看到了一些关于表单的答案,但没有看到模型的答案)。

【问题讨论】:

  • 为什么模型有办法添加css属性,模型不应该知道视图,即使有可能也请不要这样做

标签: python css django django-models


【解决方案1】:

从模型创建一个表单并在那里定义 UI 属性,这是正确的地方,例如

class MyForm(ModelForm):
    class Meta:
        model = MyClass
        fields = ('my_field')
        widgets = {
            'my_field': TextInput(attrs={'class': 'mycssclass'}),
        }

这应该为您的字段设置正确的类,然后在 HTML 文件中设置所需的 css 属性,例如

.mycssclass {
    color: red;
}

如果您使用inlineformset_factory,您仍然可以将widgets dict 传递给它,其中widgets 是映射到小部件的模型字段名称的字典,或者您可以将自定义form 传递给它,所以你可以做这样的事情

MyClassFormSet = inlineformset_factory(User, MyClass, form=MyForm, can_delete=False, extra=5)

【讨论】:

  • 谢谢。我知道表格是要走的路。我编辑了我的问题,因为实际上我的案例涉及更多,因为它使用了 inlineformset_factory。我还可以使用 ModelForm 吗? (您可以在问题中找到我更新的代码)。
  • @GregoryR 查看我的编辑,您可以将小部件或表单传递给 inlineformset_factory
猜你喜欢
  • 2017-12-19
  • 2012-01-06
  • 2012-10-22
  • 1970-01-01
  • 2015-09-28
  • 2018-04-02
  • 1970-01-01
  • 2012-12-11
  • 2016-10-10
相关资源
最近更新 更多