如何保存表单信息,使其显示在“管理站点”面板中?

时间:2019-03-10 01:47:06

标签: django django-models django-forms django-views

我正在制作一个网页,并且有一个联系部分,我正在其中寻找人们留言,然后与他们联系,我希望将表单中输入的信息存储在数据库中,以便以后我可以在Django管理页面中看到它。

SELECT a.name,
  ROUND(AVG(CASE WHEN c.rating IS NULL THEN 1 ELSE c.rating END )) AS rating,
  a.etc,b.etc,a.personid
FROM person a
JOIN bid b ON b.personid=a.personid
LEFT JOIN rating c ON c.bidid=b.bidid
GROUP BY a.personid 

我进行了几次尝试,但无法获取显示在管理员中的信息(我已经在管理员中注册了模型)。 请帮我:(

2 个答案:

答案 0 :(得分:0)

您需要致电form.save(),以便保存您的数据。目前尚未保存。在form.is_valid():块中调用它。

此外,您不需要传递表单值。您可以使用form.data.field_name来访问它们。

答案 1 :(得分:0)

好吧,因为您没有使用 ModelForm ,所以您需要在视图中手动保存这些值。像这样:

def post(self, request):
    form = ContactForm(request.POST)

    if form.is_valid():
        name = form.cleaned_data['name']
        email = form.cleaned_data['email']
        issue = form.cleaned_data['issue']
        text = form.cleaned_data['text']
        args = {
            'form': form, 
            'name': name,
            'email': email,
            'issue': issue,
            'text': text,
        }
        Contact.objects.create(**args)  # <-- saving to DB
        # rest of the code

我不确定您为什么要使用TemplateView,因为FormView更适合处理表单。例如:

class ContactView(FormView):
    form_class = ContactForm
    template_name = 'contact/contact.html'
    success_url= '/'

    def form_valid(self, form):
        name = form.cleaned_data['name']
        email = form.cleaned_data['email']
        issue = form.cleaned_data['issue']
        text = form.cleaned_data['text']
        args = {
            'form': form, 
            'name': name,
            'email': email,
            'issue': issue,
            'text': text,
        }
        Contact.objects.create(**args)
        return super(ContactView).form_valid(form)

此外,如果您使用ModelForm,则可以像这样简单地存储数据:

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = "__all__"

# usage

if form.is_valid():
    form.save()
    # rest of the code