【问题标题】:django-widget-tweaks using field.name in render_fielddjango-widget-tweaks 在 render_field 中使用 field.name
【发布时间】:2019-04-01 07:42:21
【问题描述】:

我正在使用django-widget-tweaks 及其render_field。我遇到了一个奇怪的情况,我想知道是否应该使用解决方法或不同的方法?

我正在使用djangoallauth(我还没有使用社交身份验证部分)。我有默认的 django 用户模型,并且我有一个扩展用户模型的“配置文件”模型。这一切都在工作。

这是一个专门的“会员应用程序”。只有 18 岁以上的成年人才能登录。一旦登录,一个人可以创建“会员”一个或多个“会员”记录。登录的人负责支付会员费,但自己可能不是会员;例如,父母可能登录并为 18 岁以下的青少年创建会员记录,而他们自己不是会员。

创建新成员记录时,我需要让登录的人有机会为自己创建成员记录(如果他们还没有)。如果他们选择此选项,则登录人的“个人资料”信息应自动填写新会员表格。为了促进这一点,我正在捕获和序列化登录用户的个人资料信息,并将其传递给 CBV MemberCreate 方法。此方法使用django-widget-tweaks 及其render_field 方法呈现成员创建表单,例如:

{% with field=newMemberForm.first_name %}
    {% render_field field class="form-control form-control-sm" %}
{% endwith %}

我想创建一个data-loggedindata= 属性,该属性使用field.name 值作为登录个人资料的“成员名称”。类似的东西:

{% with field=newMemberForm.first_name %}
    {% render_field field class="form-control form-control-sm" data-loggedindata=LoggedInProfile.{{field.name}} %}
{% endwith %}

但是django-widget-tweaks 似乎并不理解这一点,而且我在 django 的世界中还不够聪明,无法知道解决方法。

我可以听到有人在输入:“但你知道 {% with ... %} 构造中的字段名称”。是的,这是真的,但是成员表单有很多字段,所以我将render_field 部分包装在一个我include 的小html 文件中。所以上面的真实部分可能看起来像:

{% with field=profileForm.first_name %}
    <div class="form-group col col-3">
        {% include "Members/template_includes/field_render.html" %}
    </div>
{% endwith %}

并且包含的​​文件中包含render_field。在包含的 html 文件中,我不知道该字段的名称。

想法?

编辑

我在下面尝试过 Pankaj 的建议,但是

{% render_field field|attr:"data-loggedindata=LoggedInProfile.{{field.name}}" %}

似乎没有插入对象LoggedInProfile{{field.name}} 值。我得到的是未插值的字符串“LoggedInProfile.{{field.name}}”。

我试过了:

{% render_field field|attr:"data-loggedindata:getattr(LoggedInProfile, field.name" %}

但这也不是插值的。在 Django 模板和/或小部件调整中是否有办法以编程方式获取对象属性的值?

编辑 2

我决定走另一条路。我仍在使用widget-tweaks,但我不再尝试以这种方式使用render_field。我正在序列化将放置在 data- 元素中的数据,并将 JSON 版本放置在隐藏的表单字段中。我现在让 javascript 处理它。

【问题讨论】:

    标签: django django-widget-tweaks


    【解决方案1】:

    如果您想在带有django-widget-tweaks 的字段中添加属性,您可以简单地使用attr,在您的情况下,它就像 -

    {% with field=newMemberForm.first_name %}
        {% render_field field|add_class:"form-control form-control-sm"|attr:"data-loggedindata=LoggedInProfile.{{field.name}}" %}
    {% endwith %}
    

    还有什么疑问可以告诉我

    【讨论】:

      猜你喜欢
      • 2019-08-28
      • 2017-09-28
      • 1970-01-01
      • 2018-05-04
      • 2016-09-19
      • 2018-12-09
      • 2016-06-15
      • 2018-07-30
      • 2017-06-25
      相关资源
      最近更新 更多