django - 有什么方法可以摆脱这个错误。(1062,“密钥'customer_customerprofile.user_id'的重复条目'2'”)?
问题描述
我必须像在这个程序中一样,从 lat 和 on 创建一个名为 location 的字段。位置打印正确,但保存时出现重复输入错误。当 post 功能起作用时,我需要将 user_id 更新为 id 。由于它被保存了两次,因此显示了重复输入错误。
def post(self, request, format=None):
serializer = CustomerSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
lat = serializer.data.get('latitude',None)
lon=serializer.data.get('longitude',None)
lat_1=float(lat)
lon_1=float(lon)
location=Point((lat_1,lon_1),srid=4326)
print(location)
id=serializer.data.get('user')
print(id)
v=CustomerProfile(location=location,user_id=id)
v.save()
return Response({"message":"Customer Profile Updated Successfully","data":serializer.data}, status=200)
return Response({"message":"Customer registration failed!!","data":serializer.data}, status=400)
用户模型
class CustomUser(AbstractUser):
username = models.CharField(max_length=10,unique=True,blank=True,null=True)
email = models.EmailField(_('email address'), unique=True)
phone = models.CharField(max_length=13)
is_admin = models.BooleanField(default=False)
is_service_provider = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
# is_active=models.BooleanField(default=False)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['phone','email']
客户档案模型
class CustomerProfile(models.Model):
user = models.OneToOneField(CustomUser,on_delete=models.CASCADE)
location = models.PointField(default=Point(0,0),geography=True)
latitude = models.DecimalField(blank=True,max_digits=9,decimal_places=6,default=None,null=True)
longitude = models.DecimalField(blank=True,max_digits=9,decimal_places=6,default=None,null=True)
解决方案
您创建了新实例,而不是我们获取(v=CustomerProfile.objects.get(id=id))这个用户并更新。
def post(self, request, format=None):
serializer = CustomerSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
lat = serializer.data.get('latitude',None)
lon=serializer.data.get('longitude',None)
lat_1=float(lat)
lon_1=float(lon)
location=Point((lat_1,lon_1),srid=4326)
print(location)
id=serializer.data.get('user')
print(id)
v=CustomerProfile.objects.get(id=id)
v.location = location
v.save()
return Response({"message":"Customer Profile Updated Successfully","data":serializer.data}, status=200)
return Response({"message":"Customer registration failed!!","data":serializer.data}, status=400)
推荐阅读
- python - 名称未在 python 模块中定义
- java - 将流式 Flux 的 WebClient Post 拆分为 JSON 数组
- c# - C# 等待事件
- list - 有没有类似软件开发愿望清单的东西?
- mongodb - 如何将 mongodb 与 docker-compose 中的其他服务链接?
- python - 我如何在浮士德中使用并发?
- c# - Visual Studio 2019 中没有 Razor 组件模板
- c# - FluentAssertions 失败,带有枚举但没有类的结构
- javascript - JavaScript - 显示/隐藏功能
- c# - 如何在 .Net WPF 中实现 Oculus UI