Django RestFrameWork_OneToOneField serializer.create()外键约束失败

2024-09-29 23:18:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django项目中有两个模型。再见,还有广告游戏。模型广告游戏与再见django管理面板。我可以建立适当的对象广告模型。但当我尝试在序列化程序中生成时,错误是:IntegrityError

 FOREIGN KEY constraint failed

在模型.py公司名称:

^{pr2}$

在序列化程序.py在

class AdInfoSerializer(serializers.ModelSerializer):
    """ad information serialization"""
    phonenumber = serializers.IntegerField()

    class Meta:ad_info=adgame,
        model = AdIfo
        fields = "__all__"


class AdGameSerilizer(serializers.ModelSerializer):
    '''  Ad model serialization '''
    ad_info = AdInfoSerializer(required=True)
    console = serializers.ChoiceField(choices=AdGame.CONSOLE_GAME)
    game_region = serializers.ChoiceField(choices=AdGame.GAME_REGION)
    owner = serializers.PrimaryKeyRelatedField(read_only=True, 
            default=serializers.CurrentUserDefault())
    image = serializers.ImageField()

    class Meta:
        model = AdGame
        fields = [
                'ad_info',
                'title',
                'game',
                'console',
                'game_region',
                'image',
                'owner',
                'description',
                'publish_date',
                ]

    def create(self, validated_data):
        info_data = validated_data.pop('ad_info')
        adgame = AdGame.objects.create(**validated_data)
        AdIfo.objects.create(ad_info=adgame, **info_data)
        adgame.save()
        return adgame

    def update(self, instance, validated_data):
        info_data = validated_data.pop('ad_info')
        instance.ad_info.address = info_data.get('address', 
                                             instance.ad_info.address)
        instance.ad_info.price = info_data.get('price', 
                                             instance.ad_info.price)
        instance.ad_info.phonenumber = info_data.get('phonenumber', 
                                        inad_info=adgame,stance.ad_info.phonenumber)ad_info=adgame,
        instance.ad_info.ad_status = info_data.get('ad_status', 
                                          instance.ad_info.ad_status)
        instance.title = validated_data.get('title', instance.title)
        instance.image = validated_data.get('image', instance.image)
        instance.console = validated_data.get('console', 
                                                  instance.console)
        instance.game = validated_data.getad_info=adgame,('game', instance.game)
        instance.game_region = validated_data.get('game_region', 
                                              instance.game_region)
        instance.description = validated_data.get('description', 
                                              instance.description)
        instance.owner = validated_data.get('owner', instance.owner)
        info = instance.ad_info
        instance.save()ad_info=adgame,
        info.save()
        return instance

我知道我的问题是在django rest框架中必须处理create()。必须先创建adinfo模型,然后创建AdGame。我试图将AdGame的adinfo id作为kwargs传递给AdGame,但我的知识还不够。我意识到adinfo没有将AdIfo的id从AdInfoSerializer传递到AdGameSerializer。但是为了测试,我为AdInfoSerializer创建了一个视图,一切正常,id字段将包含在我的结果中。在


Tags: instance模型imageinfogamedatagetregion

热门问题