关于 python:Django – 从基于类的视图中访问对象字段和名称 | 珊瑚贝

Django – Accessing object fields and names from class-based view


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

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

我一直在为此苦苦挣扎。目前我正在重写 get_context_data 如下

1
2
3
4
5
6
7
8
9
10
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


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

唯一困难的一点是您希望一个视图适用于多个模型。因此,与其在视图类上显式声明模型,您需要找出某种动态传递模型的方法——也许通过覆盖 get_object.

  • 感谢丹尼尔的回复。我的问题不在于它本身是一个表单(例如,我们可以假装我只想显示对象的字段和值的表格),而是我想制作一个模板正如您在第二段中提到的那样,适用于所有数据类型。我将看看覆盖 get_object 并看看我能想出什么 – 干杯!
  • 最终覆盖 get_object 并让它返回字典。手动添加到上下文并渲染,一切看起来都很好:) 干杯


如果您使用 django 1.3,则包含基于类的视图…只需使用它们并将 \\’template_name\\’ 属性设置为您的 “common” 名称。

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


来源:https://www.codenong.com/6915469/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9662.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?