【问题标题】:What is wrong with the form?表格有什么问题?
【发布时间】:2017-01-20 11:46:25
【问题描述】:

我正在尝试为我所在的地区创建一个在线电话簿。我在应用的条目创建视图中遇到问题。

这是我的 PhoneEntry 模型:

# coding=utf-8
from django.urls import reverse_lazy
from django.db import models
from django.template.defaultfilters import slugify
from phonenumber_field.modelfields import PhoneNumberField


class PhoneEntry(models.Model):
    # Name of the organisation
    org_name = models.CharField(max_length=100, verbose_name="Organisation's Name")
    org_details = models.CharField(max_length=500, blank=True, verbose_name="Organisation's Details")
    slug = models.SlugField(default='slug', unique=True)

    # Verified or not
    verified = models.BooleanField(default=False, blank=True)

    # Dates when the entry was added and verified
    added_date = models.DateField(auto_now_add=True, editable=False)
    verified_date = models.DateField(auto_now_add=True)
    last_edited_date = models.DateField(blank=True, null=True, auto_now_add=True)

    # The phone numbers of the organisation
    primary_ph_number = PhoneNumberField(verbose_name="Primary Phone Number")
    secondary_ph_number = PhoneNumberField(verbose_name="Secondary Phone Number", blank=True)

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        super(PhoneEntry, self).save(force_insert, force_update, using, update_fields)
        self.slug = slugify(self.org_name+"-"+str(int(self.id)))
        super(PhoneEntry, self).save(force_insert, force_update, using, update_fields)

    @staticmethod
    def get_absolute_url():
        return reverse_lazy('phbook:index')

    def __str__(self):
        return self.org_name+"-"+str(self.primary_ph_number)

    class Meta:
        verbose_name_plural = "Phone Entries"

还有这个 EntryCreateForm:

class EntryAddForm(forms.ModelForm):
    """org_name = forms.CharField(max_length=100, label="Enter your organisation name: ")
    org_details = forms.CharField(max_length=100, widget=forms.Textarea,
                                  label="Enter your organisation details: ", required=False)"""
    primary_ph_number = PhoneNumberField(label="Enter your primary phone number: ")
    secondary_ph_number = PhoneNumberField(label="Enter your secondary phone number: ", required=False)

class Meta:
    model = PhoneEntry
    exclude = ['slug', 'last_edited_date', 'added_date', 'verified_date', 'verified']

这就是 EntryAddView:

class EntryCreateView(CreateView):
    model = PhoneEntry
    form_class = EntryAddForm
    template_name = 'phbook/form.html'
    success_url = 'phbook:index'

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)

        print("Data is", form.instance)

        model = form.save(commit=False)
        print(model.org_name, model.org_details, model.primary_ph_number, model.secondary_ph_number)
        model.save()
        return self.get_success_url()

还有模板form.html

{% extends 'base.html' %}
{% block head %}
    <title>Add your Organisation's Entry | PhoneBook</title>
{% endblock %}

{% block body %}
    {% load crispy_forms_tags %}
    <form method="post" action="{% url 'phbook:add' %}" enctype="multipart/form-data">
    <button type="submit" value="Submit">Submit</button>
        {% csrf_token %}
    {% crispy form %}
    </form>
{% endblock %}

base.html 仅包含基础 css 和 js 文件的静态链接。 在 EntryCreateView 中,当行 print("Data is ", form.instance) 被执行时,它产生了这个结果

请告诉我我在这里做什么??

【问题讨论】:

  • 请不要发布截图。复制并粘贴回溯。

标签: django django-forms django-views


【解决方案1】:

您已经在视图上覆盖了post,因此绕过了 CreateView 通常会执行的所有验证调用。几乎没有任何好的理由来覆盖getpost 方法;您应该始终定义更具体的方法;在这种情况下,如果您只想打印提交的数据,form_valid 会更合适。如果这只是为了调试,那么您可能根本不需要重写任何方法。

【讨论】:

  • 我之前尝试了很多,但仍然会发生错误。如果您看到回溯屏幕截图,那么您会看到该表单中没有任何内容!
猜你喜欢
  • 2013-07-21
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多