当前位置: 首页 > 知识库问答 >
问题:

无法分配““””:“User.country”必须是“country”实例

胡霖
2023-03-14

我在django rest auth中使用自定义寄存器序列化程序添加注册时的新字段。

我在用户模型中有一个国家/地区模型和一个国家/地区字段,它是国家/地区的FK。

user.models

@python_2_unicode_compatible
class User(AbstractUser):
    phone = models.CharField(max_length=15, null=True)
    verified_phone = models.BooleanField(default=False)
    country = models.ForeignKey(Country, related_name='country')
    level = models.ForeignKey(UserLevel, related_name='user_level')

user.serializers

class UserModelSerializer(HyperlinkedModelSerializer):
    class Meta:
        model = User
        country = serializers.ReadOnlyField(source='country.name')
        fields = [
            'url',
            'id',
            'username',
            'country',
            'email',
            'phone',
        ]
        read_only_fields = (
            'id',
            'password',
        )

自定义寄存器序列化器

class CustomRegisterSerializer(RegisterSerializer):
    country = serializers.PrimaryKeyRelatedField(read_only=True)

    def get_cleaned_data(self):
        return {
            'country': self.validated_data.get('country', ''),
            'password1': self.validated_data.get('password1', ''),
            'email': self.validated_data.get('email', ''),
            'username': self.validated_data.get('username', ''),
    }

    def save(self, request):
        print(self.get_cleaned_data())
        adapter = get_adapter()
        user = adapter.new_user(request)
        user.country = self.validated_data.get('country',  '')
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request, user, self)
        setup_user_email(request, user, [])
        user.save()
        return user

以国家/地区为对象从客户端发送的示例数据

{用户名:“伯尼”,电子邮件:bernie@d.com,国家:{…},密码1:“密码”,密码2:“密码”}

但是这个错误一直在发生,

无法分配““””:“User.country”必须是“country”实例。

当我在控制台上打印请求时,这就是我得到的

{'country':'','password1':'password','email':'bernie@d.com“,”用户名“:”伯尼“}

这意味着在这条线的某个地方,国家数据会丢失。

我试着只发送身份证和国家名称,但没有任何效果。我做错了什么?

共有2个答案

长孙深
2023-03-14

我也有过类似的问题,也有过类似的警告。在您的情况下,它可以通过提供国家的实例来修复。如果国家是一个空字符串,然后使用相应的国家构造函数与一个空字符串:user.country=国家(")

邢焱
2023-03-14

用户。国家=自我。已验证的数据。获取('国家','')

这是有问题的路线。

您应该传递Country对象,而不仅仅是字符串。例如:

country\u obj=国家。物体。获取(name=self.validated_data.get('country','')用户。国家/地区=国家/地区

当然,在将特定的国家/地区作为对象检索之前,请确保该国家/地区已创建且存在。

 类似资料:
  • 我一直在尝试创建一个django项目,该项目拥有用户,并且这些用户可以添加他们创建的书籍的标题。但每次我输入书名(不在管理页面上)时,我都会出现这个错误 models.py

  • 从django分配用户对象的正确方法是什么。contrib。auth。模型视图中的模型对象是否具有对用户的外键引用?新联系人示例如下: “new_contact.user=request.user”在/无法分配“”时抛出错误值error:“contact.user”必须是“user”实例,因为请求。用户是一个对象包装器,而不是实际用户(它还不存在)。但如果我建立新的联系。user=auth。get

  • 我在运行django代码时遇到以下错误。我是一个绝对的初学者,我遵循一个教程来创建一个crud应用程序。 在我的html表单中键入信息时,我得到以下错误 ValueError:无法分配django。contrib。auth。模型。0x00000288775D3EF0处的匿名用户对象:“Note.user”必须是“user”实例 从。派克 views.py forms.py 创造html

  • 型号: 序列化程序: JSON请求: 给出一条错误消息: 当我提交这个请求时,它会抛出这个错误。那么如何在JSON请求中传递驱动程序ID呢?

  • 我在向数据库添加新的自定义用户时遇到问题。我知道网上有一些关于这个问题的帖子,但我找不到解决问题的办法。点击注册页面中的“提交”按钮后,这里是哪个模板: 它一直说:“无法分配” 源代码: 观点。巴拉圭 模特。巴拉圭 表单.PY 设置。.PY: 编辑 完全错误跟踪: 文件"C:\用户\Dawid\AppData\本地\程序\Python\Python35-32\lib\site-包\django-1

  • 问题内容: state.charAt(i)部分在标题中指出了问题。如果我的方法不是完全错误的,该如何解决该问题。 问题答案: 之所以不起作用,是因为它是类的方法-即它是一个函数,并且您无法在Java中为函数赋值。 如果您想逐个字符地遍历一个字符串,我可能会这样做: 然后改为对GuessAsChar进行操作。根据您的需要,可能有更好的方法(如更整洁的方法)来搜索字符串中的字符对等。