簡體   English   中英

django-rest-framework中Django外鍵字段中的完整性錯誤

[英]Integrity error in django foreign key field in django-rest-framework

我在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")我將模型字段命名為supervisor,而db字段則像django一樣變為supervisor_id。 但是,我該如何解決該錯誤。 這可能是一件很小的事情,但我無法弄清楚在哪里做出調整。 請幫忙。

我的發帖請求是{ "sitename" : "Tony Tower", "start_date" :"2019-5-5", "supervisor" : "1" }

{
"sitename" : "Putalisadak",
"start_date" :"2019-5-5",
"supervisor_id" : "1"
}

兩者產生相同的輸出

Django希望您傳遞User對象而不是像過去那樣傳遞id,這就是為什么它引發完整性錯誤。 例如,如果主管是當前用戶,則應為serializer.save(supervisor=request.user)

附:使用手機輸入此內容,希望我的代碼標記正確。

嘗試:

   {
    "sitename" : "Tony Tower",
    "start_date" :"2019-5-5",
    "supervisor__id" : "1"
}

我認為錯誤就在這行:超級用戶= serializers.ReadOnlyField(source ='supervisor.username')您是否嘗試將其刪除?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM