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

0 投票
2 回答
1863 浏览
提问于 2025-04-16 22:44

我正在尝试为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这一部分遇到了问题。我就是搞不清楚如何访问当前的模型。我是在视图中做这个,换成mixin会不会更好一些?

谢谢你的时间。

O

2 个回答

0

如果你在用django 1.3版本,里面已经包含了基于类的视图... 你只需要使用它们,并把'template_name'这个属性设置成你想要的“通用”名称就可以了。

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

0

我觉得你可能走错方向了。Django已经知道怎么根据模型创建表单,而表单也会自己输出内容。所以你可以使用ModelFormMixin来创建一个标准的通用视图,不需要特别复杂的操作就能获取模型的字段。

唯一有点麻烦的是,你想让一个视图能处理多个模型。因此,不是直接在视图类里声明模型,你需要想办法动态地传递模型,可能可以通过重写get_object来实现。

撰写回答