【问题标题】:Django, cant save formDjango,无法保存表单
【发布时间】:2019-08-05 19:51:26
【问题描述】:

我尝试将应用程序从较旧的 1.11 Django 重写为最新的 2.2。但是当我点击保存按钮时。没有什么。没有错误,没有保存的表格,什么也没有发生。

models.py

class BlogPost(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="itemauthor", on_delete=models.SET_NULL)
    image = models.ImageField(_('Featured image'), upload_to='item_pictures/%Y/%m/%d/', default=False)
    timestamp = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=255, null=False, unique=True)
    slug = models.SlugField(max_length=80, null=True, blank=True)
    content = MarkdownxField()
    status = models.SmallIntegerField(choices=BLOG_STATUS)
    ... some more fields

forms.py

class CreateForm(forms.ModelForm):
    edited = forms.BooleanField(widget=forms.HiddenInput(), required=False, initial=False)
    content = MarkdownxFormField()
        class Meta:
            model = BlogPost
            fields = ["title", "content", "image", "edited"]

views.py

class CreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
    permission_required = 'is_active'
    model = BlogPost        
    form_class = CreateForm
    template_name = 'blog/create.html'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

    def get_success_url(self):
        return reverse('blog:home')

创建.html

{% extends 'base.html' %}
{% load static i18n %}
{% load crispy_forms_tags %}

{% block head %}
{% endblock head %}

{% block content %}

  <nav aria-label="breadcrumb">
  </nav>
  <form action="{% url 'blog:write_new' %}" enctype="multipart/form-data"  id="item-form" method="post" role="form">
    {% csrf_token %}
    {{ form|crispy }}
    <div class="form-group">
      <button type="button" class="btn btn-primary publish">{% trans 'Publish' %}</button>
    </div>
  </form>
  {{ form.media }}

{% endblock content %}

{% block modal %}
  <script src="{% static 'js/blog.js' %}"></script>
{% endblock modal %}

blog.js

$(function () {

    $(".update").click(function () {
        $("input[name='status']").val("1");
        $("input[name='edited']").val("True");
        $("#article-form").submit();
    });

        $(".publish").click(function () {
        $("input[name='status']").val("1");
        $("#article-form").submit();
    });

});

我忘记了什么?那天我一直在寻找这个错误,但不幸的是我找不到它。

【问题讨论】:

    标签: python-3.x django-forms django-2.2 login-required


    【解决方案1】:

    首先,最好不要使用与其基类相同的类名。
    class OtherClassName(LoginRequiredMixin, PermissionRequiredMixin, CreateView):

    第二,你没有打电话给save()

    def form_valid(self, form):
        form.instance.user = self.request.user
        form.save()
        return super(OtherClassName, self).form_valid(form)
    

    【讨论】:

      【解决方案2】:

      改变

      <form action="{% url 'blog:write_new' %}" enctype="multipart/form-data"  id="item-form" method="post" role="form">
      

      id="article-form"

      是的,班级也发生了变化:

      class BlogClassName(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
      permission_required = 'is_active'
      model = BlogPost        
      form_class = CreateForm
      template_name = 'blog/create.html'
      
      def form_valid(self, form):
          form.instance.user = self.request.user
          return super().form_valid(form)
      
      def get_success_url(self):
          return reverse('blog:home')
      

      最后将您的网址更改为新课程

      主要问题在于 .html 表单 ID

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-21
        • 2018-11-23
        • 2020-02-29
        • 1970-01-01
        • 2013-08-25
        • 2011-02-22
        • 2017-09-27
        相关资源
        最近更新 更多