【发布时间】:2019-10-12 14:27:26
【问题描述】:
我是 django 的新手。我有一个外键字段作为主管,如下所示
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)
这个序列化器是:
class SiteSerializer(serializers.ModelSerializer):
supervisor = serializers.ReadOnlyField(source='supervisor.username')
class Meta:
model = Site
fields = ('sitename', 'start_date', 'supervisor')
对此的看法是:
@csrf_exempt
def site_list(request):
"""
List all code snippets, or create a new snippet.
"""
if request.method == 'GET':
sites = Site.objects.all()
serializer = SiteSerializer(sites, many=True)
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = SiteSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
每当我从邮递员发布数据时,它都会显示IntegrityError at /sites/
(1048, "Column 'supervisor_id' cannot be null")
我将模型字段命名为主管,而 db 字段就像 django 一样变成了 supervisor_id。但是,我该如何解决这个错误。
这可能是一件小事,但我不知道在哪里进行必要的调整。
请帮忙。
我的发帖请求是{
"sitename" : "Tony Tower",
"start_date" :"2019-5-5",
"supervisor" : "1"
} OR
{
"sitename" : "Putalisadak",
"start_date" :"2019-5-5",
"supervisor_id" : "1"
}
两者都产生相同的输出
【问题讨论】:
-
请包含您的post请求的参数
-
@NadhemMaaloul 我确实请看一下。存在 id 为 1 的用户。
-
您是否尝试过带有一个或两个下划线“_”的“supervisor_id”?
-
我做了,没有看到不同的结果。
-
我没有看到序列化程序中“主管”字段的必要性。因为你在类的元数据中有字段 = ('sitename', 'start_date', 'supervisor')
标签: python django django-rest-framework foreign-keys