django.core.exceptions.FieldError:为用户指定了未知字段(电话)



我在django的models.py中添加了一个新的数据存储,但这不起作用,我已经进行了迁移等等。models.py:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(max_length= 1000)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=10, default="Integer")
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk':self.pk})

这是我的表格

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profile
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email','password1','password2','phone']
class UserUpdateForm(forms.ModelForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username','email','phone']
class ProfileUpdateForm(forms.ModelForm):
class Meta:
model = Profile
field = ['image']
exclude = ['fields']

请帮我找到一个解决方案,这真的阻止了我建立自己的网站。请告诉我,如果我应该添加任何其他细节,我一定会这么做。

在表单中,只能在Meta属性中引用关联模型的fields。由于将表单与User模型关联,因此无法从Post访问phone属性。

此外,phone实际上应该是User数据的一部分。所以你有两种典型的方法来做到这一点。一种是创建另一个模型来存储额外的用户数据,并添加与User模型的一对一关系。类似这样的东西:

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=10)

另一种方法是自定义User类。在这种情况下,您可以简单地扩展AbstractUser:

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=10)

在这种情况下,您需要添加到您的settings.py:

AUTH_USER_MODEL = 'your_app.User'

所有这些信息都在Django的文档中有详细说明。

默认情况下,Django的用户模型不支持Phone,您应该做的是扩展BaseUserModel以获得所需的详细信息。

这里有一个关于如何扩展django用户模型官方文档的指南

最新更新