【问题标题】:POSTing forms in Django's admin interface在 Django 的管理界面中发布表单
【发布时间】:2011-01-07 02:21:36
【问题描述】:

我正在编写一个 Django 管理操作来群发电子邮件联系人。动作定义如下:

def email_selected(self,request,queryset):
    rep_list = [] 
    for each in queryset:

        reps = CorporatePerson.objects.filter(company_id = Company.objects.get(name=each.name))

        contact_reps = reps.filter(is_contact=True)
        for rep in contact_reps:
            rep_list.append(rep)

    return email_form(request,queryset,rep_list)

email_form 作为视图存在,并使用以下代码填充模板:

def email_form(request,queryset,rep_list):
    if request.method == 'POST':
        form = EmailForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            send_mail(
                cd['subject'],
                cd['message'],
                cd.get('email','noreply@localboast'),['redacted@email.com'],
            )
            return HttpResponseRedirect('thanks')
        else:
            form = EmailForm()
        return render_to_response('corpware/admin/email-form.html',{'form':form,})

模板存在如下:

<body>
    <form action="/process_mail/" method="post">
        <table>
            {{ form.as_table }}
        </table>
        <input type = "submit" value = "Submit">
    </form>
</body>

/process_mail/ 硬链接到 urls.py 中的另一个视图 - 这是一个问题。我真的很喜欢它,这样我就不必使用&lt;form action="/process_mail/" method="post"&gt;,但不幸的是,如果没有重新加载模型的管理界面,我似乎无法将用户输入发布到视图处理程序(当我点击提交按钮,出现管理界面,我不想要。)

有没有一种方法可以使表单 POST 到自身 (&lt;form action="" method="post"&gt;) 以便我可以处理在 email_form 中收到的输入?尝试处理带有无关 URL 和不需要的函数的输入让我很困扰,因为我正在硬编码 URL 以使用代码。

【问题讨论】:

    标签: python django django-admin django-templates django-urls


    【解决方案1】:

    您可以使用 django 的内置 url 标签来避免硬编码链接。看……

    http://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

    您最好设置一个由 cron 作业触发而不是在帖子上触发的群发邮件。

    查看我在此处发布的答案 Django scheduled jobs

    此外,如果您坚持在视图更新时触发 email_send 功能,请查看

    http://docs.djangoproject.com/en/dev/topics/signals/

    【讨论】: