当前位置: 首页 > 面试题库 >

将其他参数传递给post_save信号

陈成济
2023-03-14
问题内容

我在Django应用程序中有一个用户注册表格,该表格收集用户尝试注册时的其他数据,例如地址,城市,国家/地区,电话号码等。

该数据通过post_save信号保存在“帐户”模型类中。用户创建过程如下所示:

# Function to Create user Account/Profile
def create_user_account(sender, instance, created, **kwargs):
    if created:
      models.Account.objects.create(user=instance)

# Create User / User Registration
def UserRegistration(request):
    if request.method == 'POST':
        username = request.POST['fn'].capitalize() + ' ' + request.POST['ln'].capitalize()
        # CREATE USER
        newuser = User.objects.create_user(username=username, email=request.POST['email'], password=request.POST['pw'])
        newuser.first_name = request.POST['fn'].capitalize()
        newuser.last_name = request.POST['ln'].capitalize()
        newuser.save()
    return HttpResponse(username)

#Post Save handler to create user Account/Profile
post_save.connect(create_user_account, sender=User)

在这里,UserRegistration当用户发布表单时将调用该函数,在该函数下,我可以获得POST数据,我想要的是将该数据传递给create_user_account方法,以便其填充Account模型中的字段。

现在,我确实看到Account了在数据库中创建的对象,但是除用户字段之外的所有字段均为空。显然,因为POST变量没有传递给create_user_account方法。


问题答案:

我要做的是为实例设置一些“ _attrs”,然后在信号处理程序中使用它们。

我想你的情况可能是:

# Function to Create user Account/Profile
def create_user_account(sender, instance, created, **kwargs):
    if created:
        attrs_needed = ['_language', '_field', '_otherfield']
        if all(hasattr(instance, attr) for attr in attr_needed):
            models.Account.objects.create(
                user=instance, 
                language=instance._language, 
                field=instance._field,
                otherfield=instance._otherfield)

# Create User / User Registration
def UserRegistration(request):
  if request.method == 'POST':
    username = request.POST['fn'].capitalize() + ' ' + request.POST['ln'].capitalize()
    # CREATE USER
    newuser = User.objects.create_user(
        username=username, email=request.POST['email'],
        password=request.POST['pw'])
    newuser.first_name = request.POST['fn'].capitalize()
    newuser.last_name = request.POST['ln'].capitalize()

    # Set some extra attrs to the instance to be used in the handler.
    newuser._language = request.POST['language']
    newuser._field = request.POST['field']
    newuser._otherfield = request.POST['otherfield']
    newuser.save()


  return HttpResponse(username)

#Post Save handler to create user Account/Profile
post_save.connect(create_user_account, sender=User)

我讨厌这样做,我想它可能会以可怕的方式破坏,有时很难调试,也没有一种严格的方法来强制处理程序所需的数据,可以定义一个signal_data(data, signal, instance)来定义处理程序所需的数据。特定实例的信号处理程序

我没有尝试过的一个不错的选择是使用实例的方法作为信号的处理程序,也许我们可以使用结构化的方法来传递数据。



 类似资料:
  • 问题内容: 该文档讨论了使用numba的作为的参数。我需要带有附加参数的相同内容。 我基本上是想做这样的事情: 但是,它不起作用,因为应该是/并且不能将它们转换为。我收到以下错误消息: 我没有找到有关如何从Numba中提取值的任何信息。在C语言中,应该类似于—在Numba中可以做同样的事情吗? 问题答案: 1.通过传递额外的参数 该文件说: 如果用户希望改善集成性能,则可以使用以下签名之一: 该是

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 到目前为止,我对如何通过参数将属性从一个组件传递到另一组件的了解程度如下 //开始:我的知识范围 假设存在一些在A.jsx中调用的状态变量。我想将此传递给B.jsx,所以我执行以下操作 然后在B.jsx中,我可以做类似 当被调用时将呈现“今天的主题是天气!” //结束:我的知识范围 现在,我正在阅读带有以下代码片段的react-router教程 topic.jsx: route.jsx

  • 问题内容: 在我的RCP应用程序中,左侧有一个用于导航的视图,右侧有一个用于视图的文件夹。透视图看起来像这样: 我想根据用户在导航树中选择的内容打开不同的视图。认为这并不难。我的导航树视图: 这似乎很好。仅有一个小问题:我需要以某种方式将对象(例如,selectedItem)传递给我的视图,以使用户与其内容进行交互。我怎么做? 我看到了一些示例,其中一些同事编写了自己的视图,并将其放置在右侧。然后

  • 问题内容: 我正在尝试为我的程序制作验证类。我已经建立了与MySQL数据库的连接,并且已经在表中插入了行。该表由,和领域。现在,我想通过构造函数的参数在数据库中选择特定的行。 但这似乎没有用。 问题答案: 您应该使用方法设置。这既可以确保语句的格式正确,又可以防止: Java教程中有一个很好的教程,说明如何正确使用。