簡體   English   中英

Django rest框架外鍵約束失敗創建模型

[英]Django rest framework foreign key constraint fails creating model

我在Django Rest Framework設置中有以下內容:

models.py:

class Sku(BaseModel):
    sku_code = models.CharField(max_length=18, primary_key=True)
    supplier_id = models.PositiveIntegerField(db_index=True)
    soh = models.PositiveIntegerField(default=0)
    reserved = models.PositiveIntegerField(default=0)
    broken = models.PositiveIntegerField(default=0)
    unallocated = models.PositiveIntegerField(default=0)
    reorder = models.PositiveIntegerField(default=0)

class Reservation(BaseModel):
    sku = models.ForeignKey(Sku, db_column='sku_code')
    order_id = models.PositiveIntegerField(db_index=True)

serializers.py:

class SkuSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sku
        fields = (
            'sku_code',
            'supplier_id',
            'soh',
            'reserved',
            'broken',
            'unallocated',
            'reorder',
            'created_at',
            'modified_at',
        )


class ReservationSerializer(serializers.ModelSerializer):
    sku = SkuSerializer(read_only=True)

    class Meta:
        model = Reservation
        fields = (
            'id',
            'order_id',
            'sku',
            'created_at',
            'modified_at'
        )

views.py:

class ReservationList(mixins.CreateModelMixin,
                      generics.GenericAPIView):

    queryset = Reservation.objects.all()
    serializer_class = ReservationSerializer

    def post(self, request, *args, **kwargs):
        sku = get_object_or_404(Sku, sku_code=request.data['sku_code'])
        request.data['sku'] = sku
        return self.create(request, *args, **kwargs)

現在當我發布鏈接到上面的ReservationList.post視圖的url時,我得到錯誤: IntegrityError: (1048, "Column 'sku_code' cannot be null")

它似乎繞過了序列化程序驗證並在數據庫層上失敗了。 由於某種原因,它不接受傳入的SKU。

我在這做錯了什么? 我試圖按照http://www.django-rest-framework.org/api-guide/relations/#nested-relationships中的示例進行操作,但這似乎與CreateModelMixin分解。 我無法判斷我的模型或序列化器的設置方式是否有問題。

您已將sku字段設置為read only ,這就是當您發布時序列化程序忽略它的原因。

相關文檔

只讀字段包含在API輸出中,但在創建或更新操作期間不應包含在輸入中。 任何錯誤包含在序列化程序輸入中的'read_only'字段都將被忽略。

暫無
暫無

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

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