python - create() 接受 1 个位置参数,但在 python 中给出了 2 个
问题描述
模型.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)
视图.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
我应该做些什么改变
解决方案
使用 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)
推荐阅读
- angular - 从其他控件动态设置角度控制值
- swift - 如何在快速为 UIView 提供阴影的同时去除某些 iPhone 中的额外黑色阴影?
- c# - WPF:如何实现清除命令
- python - 如何使用 redis.py 运行哨兵命令
- c# - Xamarin.Android 没有从动态库加载中找到类
- python - 如果行中的所有值都等于 False,则 Pandas DF 过滤器
- r - 闪亮:下载剧情
- docker - 在 wndows 10 中安装 docker 时出错
- azure-function-app - Azure 函数代理设置重定向到 backendUri Url
- c# - 为什么 asp.net 核心发送空对象作为响应?