在render_field

时间:2018-10-28 00:51:24

标签: django django-widget-tweaks

我正在使用django-widget-tweaks及其render_field。我有一个奇怪的情况,我想知道是否应该使用替代方法或其他方法?

我正在使用djangoallauth(我还没有使用社交认证部分)。我有默认的django用户模型,并且有一个扩展用户模型的“个人资料”模型。都可以了

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

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

呈现“成员创建”表单。
{% 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文件中。因此,上面的reall段可能看起来像:

{% 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处理它。

1 个答案:

答案 0 :(得分: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 %}

还有任何疑问让我知道