【发布时间】:2021-09-06 22:55:41
【问题描述】:
我的模型
class City(models.Model):
city_name = models.CharField(max_length=40)
def __str__(self):
return self.city_name
class Place(models.Model):
place_city = models.ForeignKey(City, on_delete=models.CASCADE)
place_name = models.TextField(max_length=40)
place_available_slots = models.IntegerField(default=None, blank=True, null=True)
def __str__(self):
return "%s - %s" % (self.place_city, self.place_name)
我的序列化器
class PlaceUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Place
fields = '__all__'
我的观点:
class PlaceUpdateAPI(APIView):
def put(self, request):
place = Place.objects.get(place_name=request.data.get("place_name"))
serializer = PlaceUpdateSerializer(place, request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors)
错误是:
{
"place_city": [
"Incorrect type. Expected pk value, received str."
]
}
我尝试输入数据,但出现了错误。 place_city 是一个外键,有人可以指导我如何通过 API 将数据放入外键中。
【问题讨论】:
-
您正在尝试传递城市名称 (str),但
place_city是外键 (int)。如果Place正在更改城市,您通常不想修改City本身,而是指定一个不同的,您可以通过传递City的ID 来完成这项工作。据我所知,您不能以这种方式更新 OneToOne 相关模型,但应该例如place.place_city.name=new_name然后place.place_city.save()。如何确定new_name取决于 API 的使用情况,它可能是不同的端点。 -
感谢您的帮助
-
@EdoardoFacchinelli 这似乎是一个答案,考虑将其作为答案而不是评论发布
标签: django api django-rest-framework