在休息框架视图中分配当前用户

时间:2017-05-24 16:47:09

标签: python django django-rest-framework

我一直在关注这些基础知识,但我没有把它弄好。我正在尝试使用作为外键的团队将我的视图与我的用户模型相关联。当我尝试创建一个gps时,我收到一条错误,说“团队是必填字段”,但它应该只读。 team属性应自动填充currentUser的id

模型

class User(models.Model):
    first_name = models.CharField(max_length=200,blank=False)
    last_name = models.CharField(max_length=200, blank=False)

class Gps(models.Model):        
    location = models.CharField(max_length=200,blank=False)
    team= models.ForeignKey(User, on_delete=models.CASCADE)

串行

class GpsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Gps
        fields = ('id','location','team')

查看

class Gps_list(generics.ListCreateAPIView):
    queryset = Gps.objects.all()
    serializer_class = GpsSerializer
    team = serializers.PrimaryKeyRelatedField(
        read_only=True, 
        default=serializers.CurrentUserDefault()
    )

1 个答案:

答案 0 :(得分:0)

需要进行两项更改。首先,应将team字段定义移动到序列化程序类而不是视图。其次,你应该使用Django的contrib.auth.User模型而不是你的用户定义,因为serializers.CurrentUserDefault()只会带来request.user。因此,您应该删除用户定义并将其导入models.py

from django.contrib.auth.models import User

进一步的步骤是将read_only=True替换为queryset=User.objects.all()以允许创建。