首页 > 解决方案 > Django-为 ModelForm 中的多对多字段清理数据

问题描述

我正在构建一个 API,它需要在创建模型实例之前将输入数据清理到 modelform m2m 字段中。

数据将以一串名称的形式出现,我需要清理数据并手动添加链接 m2m 关系。

在干净的 Def. 我是否只是将每个附加到字段本身?

以下是我工作的“干净”定义:

def clean_sourcingbroker(self):
        broker = self.cleaned_data['broker']
        cleanlist = []
        names = []
        for name in broker.replace(', ', ',').split(' '): 
            name = name.split(',')
            last_name = name[0]
            first_name = name[1]
            names.append((last_name, first_name))
        for name in names:
            brokerobj = Broker.objects.get(lastname=name[0], firstname=name[1])
            cleanlist.append(brokerobj)
        return cleanlist

标签: pythondjangodjango-models

解决方案


# If you want to change the value of a field, then you can use

def to_internal_value(self, data):
    validatedData = (super(SerializerClass, self).to_internal_value(data))
    broker = validatedData["broker"]
    cleanlist = []
    names = []
    for name in broker.replace(', ', ',').split(' '):
        name = name.split(',')
        last_name = name[0]
        first_name = name[1]
        names.append((last_name, first_name))
    for name in names:
        brokerobj = Broker.objects.get(lastname=name[0], firstname=name[1])
        cleanlist.append(brokerobj)

    validatedData["broker"] = cleanlist
    return validatedData


# If you want to validate the field, then you can use

def validate(self, data):
    if len(data['broker']) == 0:
        raise serializers.ValidationError("validation error for broker field")
    return data

推荐阅读