Django Rest Framework:使用序列化程序添加相关字段后出现完整性错误

Django Rest Framework: After adding related field with serializer I get Integrity error

我有以下序列化程序。 Django Rest Framework 允许我使用这段代码创建、更新、删除和获取信息。当然,我正在将序列化程序添加到视图集中,但问题并不存在:

class MeasurmentSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Measurment
        fields = ('id', 'user_statistic', 'value', 'date_created')

每当我获取数据时,我都需要为字段“user_statistic”添加详细信息,而不仅仅是 URL 所以我在第二行添加了代码并且它起作用了,我得到了我需要的额外信息:

class MeasurmentSerializer(serializers.HyperlinkedModelSerializer):
    user_statistic = UserStatisticSerializer(read_only=True) # New Code Added

    class Meta:
        model = Measurment
        fields = ('id', 'user_statistic', 'value', 'date_created')

然而,当我 POST 到 API 向数据库创建新信息时,它显示以下错误:

NotNullViolation: null value in column "statistic_id" of relation "cms_userstatistic" violates not-null constraint DETAIL: Failing row contains (55, 6, 0, f, f, null, 2022-01-05, 2022-01-05, null, 67).

似乎序列化相关字段会阻止 DRF 在尝试创建新对象时获取相关字段信息。如何在不破坏 POST 请求的情况下为该特定相关字段添加详细信息?我想知道是否有另一种方法可以在不使用允许我自定义结果对象的函数“to_representation”的情况下获取此信息。

谢谢大家给我的任何线索。

只需将您的 user_statistic 序列化到另一个字段:

from rest_framework import serializers

# ...

class MeasurmentSerializer(serializers.HyperlinkedModelSerializer):
    user_statistic_detailed = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Measurment
        fields = ('id', 'user_statistic', 'value', 'date_created', 
                  'user_statistic_detailed')

        def get_user_statistic_detailed(self, record):
            return serialize(UserStatisticSerializer, record.user_statistic)