【问题标题】:create() takes 1 positional argument but 2 were given in pythoncreate() 采用 1 个位置参数,但在 python 中给出了 2 个
【发布时间】:2021-03-19 08:39:14
【问题描述】:

models.py

class UserAttributes(models.Model):

    airport = models.ForeignKey('airport.Airport', related_name='user_attributes_airport', on_delete=models.SET_NULL, null=True, blank=True)
    location = PointField(blank=True, null=True)
    user =  models.ForeignKey(
        'users.AerosimpleUser', related_name='user_attributes',
        on_delete=models.CASCADE, null=True, blank=True)

views.py

class LocationViewSet(viewsets.ModelViewSet):

    serializer_class=LocationRetrieveSerializer
    http_method_names = ['get', 'post', 'patch', 'put']

    def get_permissions(self):
            switcher = {
                'create': [IsAuthenticated],
                'list': [IsAuthenticated],
                'retrieve': [IsAuthenticated],
                'update': [IsAuthenticated],
                'partial_update': [IsAuthenticated],
            }
            self.permission_classes = switcher.get(self.action, [IsAdminUser])
            return super(self.__class__, self).get_permissions()
    def get_queryset(self):
        return UserAttributes.objects.filter(
            airport__id=self.request.user.aerosimple_user.airport_id).order_by('pk')

序列化器.py

class LocationRetrieveSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserAttributes
        fields = '__all__'

    def create(self, validated_data):
    

        if UserAttributes.objects.filter(user_id=self.context["request"].data['user'],airport_id=self.context["request"].data['airport']).exists():
            obj=UserAttributes.objects.get(user_id=self.context["request"].data['user'])
            obj.location=self.context["request"].data['location']
            obj.save()
            return obj
        user_attributes = UserAttributes.objects.create(validated_data)
        return user_attributes

我应该做些什么改变

【问题讨论】:

  • 请将完整的错误回溯添加到您的问题中!

标签: python python-3.x django django-models django-views


【解决方案1】:

saving instances 上使用 drf 文档作为参考,在返回之前尝试解压缩 validated_data

    def create(self, validated_data):
    

        if UserAttributes.objects.filter(user_id=self.context["request"].data['user'],airport_id=self.context["request"].data['airport']).exists():
            obj=UserAttributes.objects.get(user_id=self.context["request"].data['user'])
            obj.location=self.context["request"].data['location']
            obj.save()
            return obj
        user_attributes = UserAttributes.objects.create(**validated_data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2013-10-28
    • 2020-05-20
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多