Python Django serializer>validated_data removes字段

2024-03-28 19:40:43 发布

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

目标:将object添加到另一个数据模型的manytomy字段。

具有多个字段的数据模型:

class ObservedDataModel(models.Model):
    domain_objects = models.ManyToManyField(DomainNameModel, blank=True)

以下代码可以工作,但外来对象id是硬编码的((ObservedDataModel, id=2)):

^{pr2}$

为了让用户设置(ObservedDataModel, id=X),我试图发送一个请求{'name': 'apple.com', 'observeddata': 2},但是validated_data字段不包含变量observeddata。在

那么如何向validated_data变量添加自定义(非model)字段?在


Tags: id目标datamodelobjectsobjectmodelsdomain
2条回答

重写序列化程序的init方法

class DomainSerializer(serializers.HyperlinkedModelSerializer): 

    def __init__(self, obs_data, *args, **kwargs):
        super(DomainSerializer, self).__init__(*args, **kwargs)
        self.obs_data = obs_data

    class Meta: 
        model = DomainNameModel
        fields = ('url', 'id', 'name') 

    def create(self, validated_data):
        domain_obj = DomainNameModel.objects.create(name=validated_data['name'])
        observed_data_object = get_object_or_404(ObservedDataModel, id=self.obs_data) # here's the item....
        observed_data_object.domain_objects.add(domain_obj)
        return domain_obj

在视图中

^{pr2}$

刚刚找到了答案,我的问题使用了stackoverflow建议(很棒的功能!)。解决方案是重写to_internal_value,如下所示:

def to_internal_value(self, data):
    internal_value = super(DomainSerializer, self).to_internal_value(data)
    my_non_model_field_raw_value = data.get("observeddata")
    my_non_model_field_value = my_non_model_field_raw_value
    internal_value.update({
        "observeddata": my_non_model_field_value
    })
    return internal_value

Thanks to trubliphone

相关问题 更多 >