这个效果,单位代码是User model 的一个外键Company

通过修改form,然后在前端显示

修改form

class AuthenticationForm(forms.Form):
"""
Base class for authenticating users. Extend this to get a form that accepts
username/password logins.
"""
username = forms.CharField(max_length=254)
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
#自定义一个company_form
company = forms.CharField(max_length=254) error_messages = {
'invalid_login': _("Please enter a correct %(username)s and password. "
"Note that both fields may be case-sensitive."),
'inactive': _("This account is inactive."),
} def __init__(self, request=None, *args, **kwargs):
"""
The 'request' parameter is set for custom auth use by subclasses.
The form data comes in via the standard 'data' kwarg.
"""
self.request = request
self.user_cache = None
super(AuthenticationForm, self).__init__(*args, **kwargs) # Set the label for the "username" field.
UserModel = get_user_model()
self.username_field = UserModel._meta.get_field(UserModel.USERNAME_FIELD)
if self.fields['username'].label is None:
self.fields['username'].label = capfirst(self.username_field.verbose_name) def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
#有修改
company = self.cleaned_data.get('company')
if username and password and company:
self.user_cache = authenticate(username=username,
password=password,
company=company)
if self.user_cache is None:
raise forms.ValidationError(
self.error_messages['invalid_login'],
code='invalid_login',
params={'username': self.username_field.verbose_name},
)
else:
self.confirm_login_allowed(self.user_cache) return self.cleaned_data

在admin form 当中找到这串代码,主要是admin login 登录界面会引用,修改部分代码然后在views当中修改login

from forms import AuthenticationForm
@deprecate_current_app
@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='admin/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.POST.get(redirect_field_name,
request.GET.get(redirect_field_name, '')) if request.method == "POST":
form = authentication_form(request, data=request.POST)
if form.is_valid(): # Ensure the user-originating redirection url is safe.
if not is_safe_url(url=redirect_to, host=request.get_host()):
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL) # Okay, security check complete. Log the user in.
auth_login(request, form.get_user()) return HttpResponseRedirect(redirect_to)
else:
form = authentication_form(request) current_site = get_current_site(request) context = {
'form': form,
redirect_field_name: redirect_to,
'site': current_site,
'site_name': current_site.name,
}
if extra_context is not None:
context.update(extra_context) return TemplateResponse(request, template_name, context)

引用自定义的form然后跳转到自定义的login页面

{% extends "admin/base_site.html" %}
{% load staticfiles %} {% load i18n admin_static %} {% block extrastyle %}{{ block.super }}{{ form.media }}<link rel="stylesheet" type="text/css" href='{% static "admin/css/login.css" %}'>
{% endblock %} {% block bodyclass %}{{ block.super }} login{% endblock %} {% block usertools %}{% endblock %} {% block nav-global %}{% endblock %} {% block content_title %}{% endblock %} {% block breadcrumbs %}{% endblock %} {% block content %}
{% if form.errors and not form.non_field_errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
</p>
{% endif %} {% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="errornote">
{{ error }}
</p>
{% endfor %}
{% endif %} <div id="content-main"> {% if user.is_authenticated %}
<p class="errornote">
{% blocktrans with username=request.user.get_username trimmed %}
You are authenticated as {{ username }}, but are not authorized to
access this page. Would you like to login to a different account?
{% endblocktrans %}
</p>
{% endif %} <form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
<div class="form-row">
{{ form.company.errors }}
<p>公司代码</p>
{{ form.company }}
</div>
<div class="form-row">
{{ form.username.errors }}
<p>用户名</p>
{{ form.username }}
</div>
<div class="form-row">
{{ form.password.errors }}
{{ form.password.label_tag }} {{ form.password }}
<input type="hidden" name="next" value="{{ next }}" />
</div>
{% url 'admin_password_reset' as password_reset_url %}
{% if password_reset_url %}
<div class="password-reset-link">
<a href="{{ password_reset_url }}">{% trans 'Forgotten your password or username?' %}</a>
</div>
{% endif %}
<div class="submit-row">
<label>&nbsp;</label><input type="submit" value="{% trans 'Log in' %}" />
</div>
</form>
/*调节样式*/
<script type="text/javascript">
document.getElementById('id_username').focus();
var company = document.getElementById('id_company');
company.style.height = '23px';
company.style.width = '339px';
</script>
</div>
{% endblock %}

最新文章

  1. 【2016-10-31】【坚持学习】【Day16】【MongoDB】【入门】
  2. 微软官方提供的用于监控MS SQL Server运行状况的工具及SQL语句
  3. [Linux] 解压tar.gz文件,解压部分文件
  4. Arcgis for Javascript 在VS2012中的智能提示
  5. oracle 12 C启动问题
  6. 更改Keil工程名
  7. prim 堆优化+ kruskal 按秩优化
  8. Java Web快速入门——全十讲
  9. Win7下Nginx的安装与配置,win7nginx配置
  10. Play使用
  11. hbase 命令
  12. Thinkphp中的U函数(Thinkphp3.2.3版本)
  13. Android开发学习之路--Activity之生命周期
  14. [Swift]LeetCode933. 最近的请求次数 | Number of Recent Calls
  15. Spring Boot 数据库连接池 HikariCP
  16. 工控随笔_09_西门子_S7-200 Smart与V20 USS通信USS_RPM_R利用轮询的方式通讯异常
  17. Android 开发 将window变暗
  18. Linux-3.0.8中基于S5PV210的GPIO模块代码追踪和分析
  19. 中触发一个断点 其原因可能是堆被损坏,这说明 ***.exe 中或它所加载的任何 DLL 中有 Bug
  20. 为archlinux终端ls不同类型文件设置不同显示颜色

热门文章

  1. [复习] JAVA 遍历目录 (递归调用和非递归)
  2. Swift-7-闭包
  3. 【转】移动App测试中的最佳做法
  4. jQuery DataTables添加自定义多个搜索条件
  5. Openstack(Kilo)安装系列之glance(六)
  6. mysql快速上手
  7. VR应用开发遍地走的日子还有多远
  8. xml html xhtml html5
  9. Delphi TreeView – 自动给标题上加图片
  10. sql server 作业没跑、开启sql 代理服务、新建作业