首页 > 解决方案 > Django REST 框架 - 在序列化程序中添加深度会使 POST 数据上的外键约束失败

问题描述

我有这样的模型:

class KioskShelfMapping(models.Model):
    mapped_shelf_basket_name_reference = models.ForeignKey(ShelfBasketMapping, on_delete=models.CASCADE, default=1)
    mapped_shelf_name = models.CharField(max_length=15, null=False, blank=False, default="default")
    mapped_kiosk_name = models.CharField(max_length=15, blank=False, null=False, default="default")
    shelf_position = models.PositiveSmallIntegerField(null=False, blank=False, default=0)

下面是我的序列化器:

class KioskShelfMappingSerializer(serializers.ModelSerializer):
    class Meta:
        model = KioskShelfMapping
        fields = ['id', 'mapped_shelf_basket_name_reference', 'mapped_shelf_name', 'mapped_kiosk_name', 'shelf_position']
        depth = 2

我面临的问题是,每当我向模型添加 POSTING 一些数据的深度时,都会给我

FOREIGN KEY 约束失败

但是当我删除深度场时,我能够成功地将数据发布到模型。我尝试搜索相同的问题并找到了这个并相应地修改了我的序列化程序:

class KioskShelfMappingSerializer(serializers.ModelSerializer):

    class Meta:
        model = KioskShelfMapping
        fields = ['id', 'mapped_shelf_basket_name_reference', 'mapped_shelf_name', 'mapped_kiosk_name', 'shelf_position']
        depth = 2
    
    def __init__(self, *args, **kwargs):
        super(KioskShelfMappingSerializer, self).__init__(*args, **kwargs)
        request = self.context.get('request')
        if request and request.method =='POST':
            print('Method is POST')
            self.Meta.depth = 0
            print(self.Meta.depth)
        else:
            self.Meta.depth = 2

这似乎不起作用。我仍然得到同样的错误。我哪里错了?感谢您提前提供帮助。

标签: djangodjango-rest-frameworkforeign-keysdjango-serializer

解决方案


推荐阅读