首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-rest-framework中django外键字段存在完整性错误

django-rest-framework中django外键字段存在完整性错误
EN

Stack Overflow用户
提问于 2019-05-27 09:59:43
回答 3查看 280关注 0票数 0

我是django的新手。我有一个外键字段作为主管,如下所示

代码语言:javascript
复制
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)

它的序列化程序是:

代码语言:javascript
复制
class SiteSerializer(serializers.ModelSerializer):

supervisor = serializers.ReadOnlyField(source='supervisor.username')

class Meta:
    model = Site
    fields = ('sitename', 'start_date', 'supervisor') 

这方面的视图是:

代码语言:javascript
复制
@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)

每当我从postman发布数据时,它都会显示IntegrityError at /sites/ (1048, "Column 'supervisor_id' cannot be null") I将模型字段命名为supervisor,而db字段则变为supervisor_id,就像django所做的那样。但是,我如何解决这个错误呢?这可能是一件非常小的事情,但我不知道该在哪里做必要的调整。请帮帮忙。

我的post请求是{ "sitename" : "Tony Tower", "start_date" :"2019-5-5", "supervisor" : "1" }

代码语言:javascript
复制
{
"sitename" : "Putalisadak",
"start_date" :"2019-5-5",
"supervisor_id" : "1"
}

两者都产生相同的输出

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-28 09:01:22

Django希望您传递一个User对象,而不是您所做的那样传递一个id,这就是它抛出完整性错误的原因。例如,如果主管是当前用户,则应为serializer.save(supervisor=request.user)

Ps:用我的手机输入这个,希望我的代码标记正确。

票数 1
EN

Stack Overflow用户

发布于 2019-05-27 10:18:16

尝试使用:

代码语言:javascript
复制
   {
    "sitename" : "Tony Tower",
    "start_date" :"2019-5-5",
    "supervisor__id" : "1"
}
票数 0
EN

Stack Overflow用户

发布于 2019-05-27 12:03:56

我想错误出在下面这行: supervisor = serializers.ReadOnlyField(source='supervisor.username')你有没有试着删除它?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56318831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档