django rest框架-在不更改现有代码的情况下扩展auth.user

奥菲克·阿格蒙(Ofek Agmon)

我正在django rest框架中工作,并构建一个RESTful api从Android应用程序访问。

我想扩展用户模型并添加电话号码字段-但我有一些带有外键的用户模型以及基于令牌的身份验证。

例如:

class Ride(models.Model):
    driver = models.ForeignKey('auth.User')
    destination=models.ForeignKey(Destination)

显然,我有默认的用户表,正如我所说的-令牌身份验证-(在注册时生成令牌,然后客户端登录-发送用户名:密码并获得令牌登录)。

我的问题是:

如何在最小代码/模型/视图更改的情况,以最佳方式向用户添加此字段我读了很多关于此主题的答案,只是想使用最佳选择。

- - - - - - 编辑 - - - - - - -

添加UserProfile之后,我在创建用户时遇到了麻烦,下面是代码:

serializers.py:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'password', )
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User(
            first_name=validated_data['first_name'],
            username=validated_data['username'],
            last_name=validated_data['last_name']
        )

        user.set_password(validated_data['password'])
        user.save()
        user.UserProfile.phone_number = self.initial_data["phone_number"]
        return user

型号

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone_number = models.CharField(max_length=15)

@receiver(post_save, sender=User)
def handle_user_save(sender, instance=None, created=False, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)
        Token.objects.create(user=instance)

user.save()调用handle_user_save方法-然后我创建用户配置。

事情是-创建它之后-我无法从用户那里更新它的字段。问题出在这一行:

user.UserProfile.phone_number = self.initial_data["phone_number"]

它将引发异常-“用户没有字段UserProfile”。

我应该怎么做?

谢谢

亚当_O

提到的OneToOne字段很可能是Django建议的扩展现有用户模型的方法

建议您创建一个新模型,例如UserProfile,然后在其中添加所需的任何新字段。UserProfile将使用OneToOne字段链接到用户模型。

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    new_field = models.CharField(max_length=100)

来自其他模型的所有外键引用仍应指向Django的用户模型。当您需要添加的新字段时,只需从用户中提取配置文件即可:

user = Users.objects.get(username='example')
print user.userprofile.new_field

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django rest框架自动填充带有user.id的文件

来自分类Dev

如何在 django rest 框架中保存一个对 User 有外键的实体?

来自分类Dev

Django rest框架为self.request.user。<model>创建

来自分类Dev

Django Rest框架QuerySet不排序

来自分类Dev

用于Django REST框架分页的jQuery代码

来自分类Dev

没有模型的 Django REST API 框架

来自分类Dev

想在没有休息框架的情况下使用REST学习Django

来自分类Dev

如何使用REST / Django rest框架检索过期模型的更改

来自分类Dev

Django Rest框架上的私有REST API

来自分类Dev

Django rest框架-PrimaryKeyRelatedField

来自分类Dev

Django Rest框架表格

来自分类Dev

Django Rest框架关系

来自分类Dev

Django Rest框架assertionError

来自分类Dev

Django rest框架ModelSerializer

来自分类Dev

Django rest框架-PrimaryKeyRelatedField

来自分类Dev

Django Rest框架表格

来自分类Dev

Django Rest 框架 - NoReverseMatch

来自分类Dev

Django Rest 框架:MultipleObjectsReturned

来自分类Dev

扩展用户模型Django REST框架3.xx

来自分类Dev

Django rest框架扩展的用户配置文件

来自分类Dev

Django Rest框架Viewset权限“创建”而不“列表”

来自分类Dev

django rest 框架 ListAPIView 不返回任何值

来自分类Dev

使用 Django rest 框架获取请求不返回数据

来自分类Dev

使用Django rest框架时更改字段名称

来自分类Dev

Django Rest框架将主键更改为使用unqiue字段

来自分类Dev

在django rest框架中哪里可以更改json响应的形式?

来自分类Dev

令牌有效期有多长?Django REST框架

来自分类Dev

ModelSerializer django rest框架中的所有字段

来自分类Dev

Django Rest框架authtoken'module'对象没有属性'views'

Related 相关文章

热门标签

归档