我们可以格式化模型表单如何在模板上的 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)创建了一个模型表单。当我在模板上显示它时,它作为用户名显示在选择框上。我想显示它是名字和姓氏。
这是我在 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
的外键。自定义选择字段意味着用户将显示为<first_name> <last_name>
而不是<username>
。这不是你想要的吗?如果没有,请用一些代码更新您的答案,以帮助解释。
是的,这就是我想要的。我有一个名为 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 模板中