【发布时间】:2019-05-30 00:47:29
【问题描述】:
我正在尝试序列化具有外键“用户”的模型。 关心的视图sn-p是:
data = JSONParser().parse(request)
serializer = SiteSerializer(data=data)
if serializer.is_valid():
userid = data['supervisor']
user = User.objects.get(id=userid).__dict__ ## tried case I
user = User.objects.get(id=userid) ## tried case II
serializer.save(supervisor=user)
return JsonResponse(serializer.data, status=201)
序列化器如下:
class SiteSerializer(serializers.ModelSerializer):
supervisor = serializers.RelatedField(source='User', read_only=True)
class Meta:
model = Site
fields = ('sitename', 'start_date', 'supervisor')
型号是:
class Site(models.Model):
sitename=models.CharField(max_length=255)
start_date=models.DateTimeField
supervisor=models.ForeignKey(User,on_delete=models.PROTECT)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return "{}".format(self.sitename)
当我传递主管对象时,它说“类型”类型的对象不可序列化,当我将主管作为字典传递时,它说 dict 变量主管必须是用户实例。 我该如何解决这个问题并继续?
【问题讨论】:
-
你为什么使用
data = JSONParser().parse(request)而不是直接使用serializer = SiteSerializer(data=request.data)? -
这一行
start_date=models.DateTimeField(类)必须是start_date=models.DateTimeField()(实例) -
@DaniloAkamine 我在第一条评论中尝试了你的建议,它给出了错误为
{"non_field_errors": ["Invalid data. Expected a dictionary, but got WSGIRequest."]},这意味着serializer.is_valid()这样做会失败。您在第二条评论中提到的事情,感谢您指出。它已经看不见了。
标签: django django-rest-framework foreign-keys