无法分配“'”:用户.国家必须是一个“国家”的瞬间

2024-04-28 15:44:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我在用户模型中有一个国家模型和一个国家字段,这是一个FK to countries。在

用户模型

@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.serializer

^{2}$

自定义寄存器序列化器

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

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

{username: "bernie", email: "bernie@d.com", country: {…}, password1: "password", password2: "password"}

但这个错误不断出现

Cannot assign "''": "User.country" must be a "Country" instance.

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

{'country': '', 'password1': 'password', 'email': 'bernie@d.com', 'username': 'bernie'}

也就是说,在这条线的某个地方,国家数据丢失了。在

我试过只寄身份证和国家名称,但没用。我做错什么了?在


Tags: selfdatagetadaptermodelsemailrequestusername
1条回答
网友
1楼 · 发布于 2024-04-28 15:44:05

user.country = self.validated_data.get('country', '')

这是一条有问题的线路。在

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

country_obj = Country.objects.get(name=self.validated_data.get('country', '')) user.country = country_obj

当然,请确保特定的Country是在之前创建的,并且在将其作为对象检索之前存在。在

相关问题 更多 >