我们可以格式化模型表单如何在模板上的 Django 中显示吗

Posted

技术标签:

【中文标题】我们可以格式化模型表单如何在模板上的 Django 中显示吗【英文标题】:Can we format as to how the Model Form displays in Django on template 【发布时间】:2015-11-23 08:05:29 【问题描述】:

所以我使用 django 用户模型(来自 django.contrib.auth.models 导入用户)并使用 ModelForm(来自 django.forms 导入 ModelForm)创建了一个模型表单。当我在模板上显示它时,它作为用户名显示在选择框上。我想显示它是 first_name 和 last_name。

这是我在 html 中用于表单的代码

<form class="form-horizontal" method="post" role="form">
    % csrf_token %
    <fieldset>
        <legend> title </legend>

        % for field in form % % if field.errors %
        <div class="form-group">
            <label class="control-label col-sm-2"> field.label </label>
            <div class="controls col-sm-10">
                 field 
                <p class="formError">
                    % for error in field.errors % error % endfor %
                </p>
            </div>
        </div>
        % else %
        <div class="form-group">
            <label class="control-label col-sm-2"> field.label </label>
            <div class="controls col-sm-10">
                 field  % if field.help_text %
                <p class="help-inline"><small> field.help_text </small></p>
                % endif %
            </div>
        </div>
        % endif % % endfor %
    </fieldset>

    <div class="form-actions" style="margin-left: 150px; margin-top: 30px;">
        <button type="submit" class="btn btn-primary">Submit</button>
    </div>
</form>

【问题讨论】:

【参考方案1】:

子类ModelChoiceField 并覆盖label_from_instance 以显示名字和姓氏。

from django.forms import ModelChoiceField

class UserChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s %s" % (obj.first_name, obj.last_name)

然后使用模型表单中的选择字段。

from django import forms
from django.contrib.auth.models import User

class MyModelForm(forms.ModelForm):
    user = UserChoiceField(queryset=User.objects.all())
    ...

【讨论】:

感谢您的回复。如果 User 是另一个模型的foregin_key,如何做到这一点?就像模型表单用于另一个模型,但用户是模型中的字段之一。 上面的表格MyModelForm是一个模型MyModel,它有一个User的外键。自定义选择字段意味着用户将显示为&lt;first_name&gt; &lt;last_name&gt; 而不是&lt;username&gt;。这不是你想要的吗?如果没有,请用一些代码更新您的答案,以帮助解释。 是的,这就是我想要的。我有一个名为 PermissionAssignment 的模型 类 PermissionAssignment(models.Model): permissionAssignmentID = models.AutoField(primary_key=True) projectID_fk = models.ForeignKey(Project, default=None, null=True) userID_fk = models.ForeignKey(User, default=1) 这是我创建表单的模型 如果您将userID_fk = UserChoiceField(queryset=User.objects.all()) 添加到您的模型表单,上面的UserChoiceField 应该可以工作。

以上是关于我们可以格式化模型表单如何在模板上的 Django 中显示吗的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在 ajax 中返回模型表单集并在模板中使用

(如何)我可以判断我的表单字段是不是隐藏在 Django 模板中

多对多模型的 Django 表单。如何从视图/模板填写表格?

如何从 django 的表单中获取数据?

Django:如何包含模型表单?

如何使用 django 表单/模型来表示字段之间的选择?