[英]django.core.exceptions.FieldError: Unknown field(s) (username) specified for Employee
我正在尝试扩展用户模型
所以我创建了一个名为员工的新模型,外键到用户模型
from django.db import models
from django.contrib.auth.models import User
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.CharField(max_length=200)
并尝试为注册创建一个表单
from django.contrib.auth.forms import UserCreationForm
from employee.models import Employee
class EmployeeForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = Employee
fields = UserCreationForm.Meta.fields + ('department',)
这些是我所做的唯一更改,但出现以下错误:
文件“/home/sugumar/python/django/project1/project1/urls.py”,第18行,从employee.views导入注册文件“/home/sugumar/python/django/project1/employee/views.py”,第 2 行,从 .forms 导入 EmployeeForm 文件“/home/sugumar/python/django/project1/employee/forms.py”,第 4 行,在类 EmployeeForm(UserCreationForm) 中:文件“/home/sugumar/.local/share /virtualenvs/project1-j0yhUYNK/lib/python3.5/site-packages/django/forms/models.py", line 266, in new raise FieldError(message) django.core.exceptions.FieldError: Unknown field(s) (用户名)为员工指定
我正在尝试扩展用户模型,因此我创建了一个名为employee的新模型,其中外键指向用户模型。
通过使用OneToOneField
,确实可以扩展用户系统,但是您不能简单地使用它来在同一Form
处理两个模型,从而一次构造两个对象。
您基本上在这里构造的是Employee
模型上的ModelForm
,但是这里您构造了带有额外字段的Meta
类,但是这些字段与Employee
对象上的模型字段无关,因此会出现错误。
简单地构造两个表单可能更好,因此Employee
-form看起来像:
# app/forms.py
from django.forms import ModelForm
class EmployeeForm(ModelForm):
class Meta:
model = Employee
fields = ('department',)
然后创建一个像这样的视图:
# app/views.py
from django.contrib.auth.forms import UserCreationForm
from app.forms import EmployeeForm
def create_user(request):
if request.method == 'POST':
user_form = UserCreationForm(request.POST)
employee_form = EmployeeForm(request.POST)
if user_form.is_valid() and employee_form.is_valid():
user = user_form.save()
employee = employee_form.save(commit=False)
employee.user = user
employee.save()
return redirect('...')
else:
user_form = UserCreationForm()
employee_form = EmployeeForm()
return render(
request,
'app/my_template.html',
{'user_form': user_form, 'employee_form': employee_form}
)
因此,在视图中,鉴于两种形式均有效,我们将创建一个User
和Employee
对象,并将employee
链接到user
。 我们进一步以两种形式渲染模板。
在模板中,我们在相同的<form>
标签中呈现两个表单:
<!-- app/templates/app/my_template.html -->
<form action="{% url 'app:create_user' %}" method="post">
{% csrf_token %}
{{ user_form }}
{{ employee_form }}
</form>
其中'app:create_user'
是指向上面定义的视图的URL名称。
我遇到过同样的问题。
我解决了它删除所有对员工的引用。 然后:
python manage.py migrate
最后添加 Employee 并完成迁移:
python manage.py makemigrations
python manage.py migrate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.