python - 发布的数据不会出现在 DRF 序列化程序属性上
问题描述
我在这里遇到问题,无法找出发生了什么。
我有 DRF REST API,它必须接收一个 POST 来创建一个AlertRule
对象和几个EmailAddress
与之相关的对象。问题是,在调试验证器方法时,电子邮件数据应该出现在验证器方法的attr
参数上,但是当我发送数据 obver http post 时它就不存在了。
我发送的示例:
{'alert_event_max_count': 2, 'alert_time_window': 2, 'company': 'Q29tcGFueToxNw==', 'company_id': 17, 'comparison_rule': 4, 'comparison_value': '0', 'daily_start_time': '07:00:00', 'daily_stop_time': '17:59:59', 'emails': [{'email':'bruno.carli@smartgreen.net'}], 'end_date': '2022-01-01', 'installation_ids': [], 'monitored_property_id': 30, 'name': 'kk', 'start_date': '2019-01-01', 'week_day_bitmask':17}
attr
唯一显示:
OrderedDict([('alert_time_window', 2), ('alert_event_max_count', 2), ('company', <Company: Company object (17)>), ('comparison_rule', 4), ('comparison_value', '0'), ('daily_start_time', datetime.time(7, 0)), ('daily_stop_time', datetime.time(17, 59, 59)), ('end_date', datetime.date(2022, 1, 1)), ('installations', []), ('monitored_property', <Property: None - None>), ('name', 'loli'), ('start_date', datetime.date(2019, 1, 1)), ('week_day_bitmask', 17)])
'emails': [{'email':'bruno.carli@smartgreen.net'}],
我发送的数据在哪里?
这里的代码:
序列化器
class EmailSerializer(serializers.ModelSerializer):
class Meta:
fields = ['id', 'email']
model = EmailAddress
class AlertRuleSerializer(serializers.ModelSerializer):
emails = EmailSerializer(many=True, required=False)
... # other fields
class Meta:
model = AlertRule
fields = [
... # other fields
'emails'
]
depth = 2
def validate(self, attrs): # pylint: disable=arguments-differ
"""
Valida se as instalações recebidas são da mesma empresa da regra
de alerta.
"""
installations = attrs.get('installations', [])
company = attrs.get('company')
print(attrs) # show received attributes data
return attrs
楷模:
class EmailAddress(models.Model):
alert_rule = models.ForeignKey(
'AlertRule',
related_name='emails',
on_delete=models.CASCADE
)
email = models.EmailField(unique=True)
最后,AlertRule
创建了,但没有创建任何电子邮件对象:/
'{"alert_time_window":2,"alert_event_max_count":2,"company":{"id":17,"name":"local3","cnpj":"93293944000185"},"comparison_rule":4,"comparison_value":"0","daily_start_time":"07:00:00","daily_stop_time":"17:59:59","end_date":"2022-01-01","id":25,"installations":[],"monitored_property":{"id":30,"measurement_unit":null,"name":null,"source_name":"internal_temperature","service":"","short_name":null},"name":"lol","start_date":"2019-01-01","week_day_bitmask":17,"emails":[]}'
任何提示?
解决方案
推荐阅读
- sql - 引用外键并为父表中的列添加检查约束
- reactjs - 如何在 React 中使用来自不同 js 文件的 let 值到 app.js
- c# - 在 .NET 核心应用程序中安全使用/存储密码
- javascript - 如何在 JavaScript 中访问 Django 脆标签数组?
- c# - 动态替换时,带有 ASP.NET MVC的标记中的空 href调用默认路由
- robolectric - 如何使用 AndroidX 片段测试来测试选项菜单?
- sql - PostgreSQL 交叉表转置行到列
- apache-spark - H2O 苏打水是否允许以 Kafka 作为流源进行在线培训
- python - 查找一个月的每周和周末平均销售额
- python - 尝试通过 python 中的 pandas 对这个 protion 进行“分组”时出错