如何解决在 Signal 中获取 Django 管理表单 POST 数据很热吗?
我在从 Django 管理应用程序站点表单中检索 POST 数据并将其发送到 Signal 时遇到问题。信号是开箱即用的标准 pre_save 信号。我想获取表单发布数据的 id 值,并在将特定通道保存到数据库之前进行一些外部 api 查找和验证。如果某些外部验证不起作用,我宁愿在保存之前拒绝该频道。
我有其他使用 ORM 查询集的信号,它们工作正常,因为数据已经在数据库中,但获取 POST 数据对我来说是有问题的。
我的模型:
from django.forms import ModelForm
from django.db.models.signals import post_save,pre_save
class Channel(models.Model):
cid = models.CharField(max_length=128,null=True,unique=True,blank=False)
title = models.CharField(max_length=256,blank=True)
description = models.TextField(max_length=1024,blank=True)
def __str__(self) -> str: return self.cid
我的信号(保存在models.py文件中):
def save_pre(sender,instance,**kwargs):
if request.method == 'POST':
ModelFormPost = ModelForm(request.POST)
if ModelFormPost.is_valid():
cid = ModelFormPost.cleaned_data['cid']
print(cid) # do other stuff,for SO only.
pre_save.connect(save_pre,sender=Channel)
执行此操作时,出现以下错误:
TypeError: save_pre() missing 1 required positional argument: 'request'
如果我像这样将“请求”放入参数中:
def save_pre(sender,request,**kwargs):
....
我仍然收到错误消息。如何将请求的 POST 数据收集到信号函数中?信号函数似乎不喜欢附加参数。这甚至可能还是我需要通过视图来做到这一点? (我认为在单个信号函数中进行预处理会更有效。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。