python - 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
解决方案
# 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
推荐阅读
- python - 从 Oracle DB 下载数据并导出到 csv 文件
- python - 以编程方式创建 Outlook 规则时出现“无效的操作或条件”
- delphi - Delphi DX10.4 E2064代码无法编译
- java - org.springframework.beans.factory.BeanCreationException:在 Spring 中创建 bean 时出错
- javascript - React JS 在更改另一个组件的状态时更改组件样式
- c++ - 如何将文本文件中的数据分配到结构C++中
- sql - 如何检查在Oracle中创建分区的列
- python - 从每个单元格中提取类别并对其进行编码
- php - 如何使用 laravel 通过电子邮件从联系表中接收信息
- c# - C#将驱动器号分配给隐藏卷