【发布时间】:2017-11-23 01:42:31
【问题描述】:
我想在 django.contrib.auth.models 的用户模型中添加生日和性别数据列。但是,我写了 forms.py 之类的
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.forms import AuthenticationForm
from .models import User
class RegisterForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'email','password1','password1','birthday','sex',)
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs['class'] = 'form-control'
self.fields['email'].widget.attrs['class'] = 'form-control'
self.fields['password1'].widget.attrs['class'] = 'form-control'
self.fields['password2'].widget.attrs['class'] = 'form-control'
self.fields['birthday'].widget.attrs['class'] = 'form-control'
self.fields['sex'].widget.attrs['class'] = 'form-control'
当我运行代码时,django.core.exceptions.FieldError: Unknown field(s) (birthday) specified for User 错误发生。 我搜索了 Django 文档,所以我发现各种用户对象的字段是有限的,比如只有用户名、电子邮件和密码、is_staff 和 last_login 等。但是现在我想添加生日和性别数据列,我该怎么做?不能我做吗?我应该怎么写? 现在通过一个答案,我重写了models.py
from django.db import models
from django.contrib.auth.models import User
class NewUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birthday = models.DateField()
sex = models.IntegerField()
我重写了forms.py
class RegisterForm(ModelForm):
class Meta:
model = NewUser
fields = ('username', 'email','password1','password1','birthday',)
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs['class'] = 'form-control'
self.fields['email'].widget.attrs['class'] = 'form-control'
self.fields['password1'].widget.attrs['class'] = 'form-control'
self.fields['password2'].widget.attrs['class'] = 'form-control'
self.fields['birthday'].widget.attrs['class'] = 'form-control'
我用同样的方法重写了forms.py 之前。但是我得到了一个错误django.core.exceptions.FieldError: Unknown field(s) (username, password1, email) specified for NewUser。我应该如何解决这个问题?
【问题讨论】: