我的django应用程序在表格视图中显示数据库中的对象。问题是这些对象(模型)非常复杂:有50多个字段。几乎每个字段我都要做一些格式化:
Django模板语言对于简单的情况有几个有用的标签,但我认为在一般情况下(如我的)不适合严格格式化。
在模型类中创建@ property-s也不是一个选项,因为问题与渲染有关,与模型无关。
所以我想我应该在视图中进行转换:为每个obj创建dict,填充转换后的数据并传递给模板。
但是!该模型有很多字段,我不想将它们全部复制:)此外,保留模型结构以在django模板(例如,重新组合)和查询集懒惰中使用它会很棒。
所以最好的方法是指示django“如何渲染”。有可能吗?
答案 0 :(得分:1)
你可以使用Django休息框架
doc(http://www.django-rest-framework.org/api-guide/fields/)
中的示例class Color(object):
"""
A color represented in the RGB colorspace.
"""
def __init__(self, red, green, blue):
assert(red >= 0 and green >= 0 and blue >= 0)
assert(red < 256 and green < 256 and blue < 256)
self.red, self.green, self.blue = red, green, blue
class ColorField(serializers.Field):
"""
Color objects are serialized into 'rgb(#, #, #)' notation.
"""
def to_representation(self, obj):
return "rgb(%d, %d, %d)" % (obj.red, obj.green, obj.blue)
def to_internal_value(self, data):
data = data.strip('rgb(').rstrip(')')
red, green, blue = [int(col) for col in data.split(',')]
return Color(red, green, blue)
定义自定义序列化程序/字段后 您只需要指定用于表示数据的序列化程序
答案 1 :(得分:1)
如果您使用的是Django Rest Framework
,那么您只需使用serializers
即可。但我不认为这是一个案例。你想要完成的东西看起来与django forms
的角色非常相似,但是它们只用于(传统上)用于保存/更新模型,即POST请求。现在,您可以定义一个用于过滤/渲染的新类,并在视图中使用它,或者继续使用django表单,这将自动为不同的字段提供基本清理。