繁体   English   中英

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

[英]django.core.exceptions.FieldError: Unknown field(s) (phone) specified for User

我在我的 django 的 models.py 中添加了一个新的数据存储,但这不起作用我已经进行了迁移和一切。 模型.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})

这是我的 forms.py:

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']

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

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

这是关于 如何扩展 django 用户 model官方文档的指南

在您的 forms 中,您只能引用您在Meta属性中关联的 model 的fields 当您将 forms 与User model 关联时,您无法从Post访问phone属性。

此外, phone确实应该是User数据的一部分。 所以你有两种规范的方式来做到这一点。 一种是创建另一个 model 来存储其他用户数据,并添加与User model 的一对一关系。 像这样的东西:

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

另一种方法是自定义User class。 在这种情况下,您可以简单地扩展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 的文档中都有详细说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM