【问题标题】:Django - Form is not saving the modificationsDjango - 表单没有保存修改
【发布时间】:2015-06-08 20:04:44
【问题描述】:

我正在创建一个页面,我的用户可以在其中编辑他们的文章,但是有一个问题,当我提交表单时,我的表单没有保存修改。让我们看看:

views.py

def edit(request, id=None, template_name='article_edit.html'):

    if id:
        article = get_object_or_404(Article, id=id)
        if article.user != request.user:
            return HttpResponseForbidden()
    else:
        article = Article(user=request.user)

    if request.POST:
        form = ArticleForm(request.POST, instance=article)
        if form.is_valid():
            save_it = form.save()
            save_it.save()
            form.save_m2m()
            return HttpResponseRedirect("/")
    else:
        form = ArticleForm(instance=article)

    context = {'form': form}
    populateContext(request, context)
    return render(request, template_name, context)

第 3 到 8 行:是检查是否是您自己的文章没有问题。

第 10 到 18 行:这几行之间有问题,提交表单时我的表单没有保存

forms.py (ModelForm)

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        exclude = ['date', 'rating', 'user']

form = ArticleForm()

(第 4 行:我排除了保存时的日期、评分和用户名,以便用户无法更改这些信息。)

我的 template.html 和 urls.py 没有任何问题,我检查了 10 多次 :)

任何帮助都会很棒,我在这个问题上被阻止了 1 个多月...


******* 编辑 *******

Models.py

class Article(models.Model):
    user = models.ForeignKey(User)
    titre = models.CharField(max_length=100, unique=True)
    summary = RichTextField(null=True, max_length=140)
    contenu = RichTextField(null=True)
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de parution")
    image = models.ImageField(upload_to='article', default='article/amazarashi.jpeg')
    rating = RatingField(can_change_vote=True)
    tags = TaggableManager(through=TaggedItem, blank=True)

    def __str__(self):
        return self.titre

Template.html

{% block body %}

{% if user.is_authenticated %}
      <p>Authentificated as <strong>{{ user.username }}</strong></p>
    {% else %}
      <p>NOT Authentificated</p>
    {% endif %}

<h1>Edit this {{ article.titre }}</h1>

<br>

<div class="col-xs-12 col-sm-8 col-md-8 col-lg-8">
<form enctype='multipart/form-data' action="{% url "article.views.index" %}" method="post" class="form"  autocomplete="off" autocorrect="off">
    {% csrf_token %}

    <div class="form-group">TITRE
      {{ form.titre.errors }}
      {{ form.titre }}
    </div>
    <div class="form-group">SUMMARY
      {{ form.media }}
      {{ form.summary.errors }}
      {{ form.summary }}
    </div>
    <div class="form-group">CONTENU
      {{ form.media }}
      {{ form.contenu.errors }}
      {{ form.contenu }}
    </div>
    <div class="form-group">
      {{ form.image.errors }}
      {{ form.image }}
   </div>
   <div class="form-group">TAGS
      {{ form.tags.errors }}
      {{ form.tags }}
   </div>

   <input type="submit" class="btn btn-default" value="Submit"/>
</div>

</form>

{% endblock %}

【问题讨论】:

  • 您的模型由什么组成?可以发在这里吗?为什么需要save_m2m() 电话?
  • 提交表单时request.POST的内容是什么?请在第 10 行下方添加print request.POST。(抱歉,高级调试技术:)
  • 还有一些问题... 为什么要在 models.py 上编辑 view?您确定您使用的是正确的视图吗?
  • @danielcorreia 抱歉我的错误是视图,我更正了,我还有一条消息说“”表单包含文件选择字段,但未指定 POST 方法和编码“多部分/表格数据“。该文件将不会被发送。"".
  • @bellum 这是我的model.py

标签: python django forms


【解决方案1】:

根据你的错误信息..在模板中修改你的表单:

<form enctype='multipart/form-data' ...>

将request.FILES 添加到您的表单创建中:

if request.POST:
    form = ArticleForm(request.POST, request.FILES, instance=article)

更新: 你有奇怪的url 标签参数。你确定你已经定义了你的网址,比如:('...', your_view, name='article.views.index')?我很怀疑,因为url 标签将 url 名称作为参数,但不是视图路径,而且通常没有人使用这样的 url 名称。

【讨论】:

  • 感谢您的回答,但即便如此,它仍然无法保存。
  • 不,它只是重定向到索引,没有改变任何东西
  • 有这个:ReferenceError: $ is not defined - ajax.js(我不使用 ajax)
  • @Sia 你能发布你的模板吗?
  • @Sia 如果我是你,我会先用最简单的模板对其进行测试,以确保它至少可以工作。
猜你喜欢
  • 2014-04-18
  • 2018-05-16
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2016-11-18
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多