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

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

这是我在 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>

【问题讨论】:

    标签: django django-models django-forms django-templates django-views


    【解决方案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 应该可以工作。
    猜你喜欢
    • 2016-01-11
    • 2017-11-13
    • 2021-07-25
    • 2017-02-03
    • 1970-01-01
    • 2017-11-15
    • 2012-03-30
    • 2012-06-21
    相关资源
    最近更新 更多