Django - 从基于类的视图访问对象字段和名称

时间:2011-08-02 16:39:01

标签: python django model

我正在尝试为Django编写一个基于类的视图,每次都使用相同的模板,无论模型如何。目的是我可以为每个模型添加一个urls.py条目,而不必担心视图或模板。

这将用于显示表单,并且由于表单字段名称取决于模型类型,因此需要检查模型并在视图级别提取字段名称,以便将它们传递给通用模板。然后,模板根据对象的字段名称和值生成表单。

我一直在努力解决这个问题。目前我正在努力覆盖get_context_data,如下所示

def get_context_data(self, **kwargs):
    context = kwargs
    context_object_name = self.get_context_object_name(self.object)
    if context_object_name:
        context[context_object_name] = self.object
    #add some custom stuff on too
    tempdict = [(field, field.value_to_string(self)) for field in self.object._meta.fields]
    #context.update({'datafields' : tempdict})
    context.update({ 'blarg': 'tester!!'})
    return context

self.object._meta.fields位是我讨论问题的地方。我无法理解如何访问当前模型。我在一个视图中这样做,我在混音中有更多的运气吗?

感谢您的时间。

0

2 个答案:

答案 0 :(得分:0)

如果您使用的是django 1.3,则会包含基于类的视图...只需使用它们并将'template_name'属性设置为您的“常用”名称。

https://docs.djangoproject.com/en/1.3/topics/class-based-views/

答案 1 :(得分:0)

我认为你这是错误的做法。 Django已经知道如何从模型创建表单,表单知道如何输出自己。因此,您可以使用ModelFormMixin创建标准通用视图,无需为了获取模型字段的表单字段而做任何聪明的事情。

唯一困难的是您希望一个视图适用于多个模型。因此,不是在视图类上明确声明模型,而是需要通过某种方式动态传递它 - 可能是通过覆盖get_object