您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将其他参数传递给post_save信号

将其他参数传递给post_save信号

要做的是为实例设置一些“ _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)来定义处理程序所需的数据。特定实例的信号处理程序。

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

其他 2022/1/1 18:22:43 有478人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶