【发布时间】:2016-11-15 07:30:13
【问题描述】:
我正在尝试通过模型中的 onetonefield 扩展 django 用户身份验证。这是模型:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
nim = models.CharField(max_length=10, blank=True)
def __str__(self):
return self.user.username
使用基本管理面板,我可以先创建用户实例,然后再创建个人资料。但我在管理面板上使用自定义表单,所以我可以在一个表单上创建它。这是表单外观:
这是forms.py
from django import forms
from django.contrib.auth.models import User
from .models import Profile
class ProfileForm(forms.ModelForm):
username = forms.CharField(required=False, max_length=150)
password = forms.CharField(required=False, max_length=50, widget=forms.PasswordInput)
class Meta:
model = Profile
fields = ('username', 'password', 'nim')
这是 admin.py
from django.contrib import admin
from django.contrib.auth.models import User
from .forms import ProfileForm
from .models import Profile
class ProfileAdmin(admin.ModelAdmin):
form = ProfileForm
def save_model(self, request, obj, form, change):
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = User.objects.create_user(username=username, password=password)
user.save()
obj.user = user
obj.save()
admin.site.register(Profile, ProfileAdmin)
有了这些,我就可以创建配置文件实例了。但是当我尝试更改/编辑配置文件时,它没有显示用户名和密码字段的初始值,只有 nim 字段显示。
empty username and password field
感谢您的帮助
【问题讨论】:
标签: django django-forms django-admin