在Django的管理界面中发布表单

时间:2010-01-20 01:45:08

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

我正在为群发电子邮件联系人编写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中的另一个视图 - 这是一个问题。我真的很喜欢它,所以我不必使用<form action="/process_mail/" method="post">但不幸的是我似乎无法将用户输入POST到视图处理程序而没有管理界面,因为模型正在重新加载到它的位置(当我点击提交按钮,出现管理界面,我不想要。)

有没有办法让表单POST自己(<form action="" method="post">),以便我可以处理在email_form中收到的输入?试图处理带有无关URL和不需要的函数的输入困扰我,因为我正在硬编码URL以使用代码。

1 个答案:

答案 0 :(得分:1)

您可以使用django的内置网址标记来避免硬编码链接。见......

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

你可能最好设置一个群发邮件,而不是通过一个cron工作而不是帖子。

查看我在这里发布的答案 Django scheduled jobs

此外,如果您坚持在视图更新上触发email_send函数,请查看

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