首页 > 解决方案 > Django 表单不保存任何信息

问题描述

所以我一直在尝试用 django 建立一个活动管理器,但我仍然处于起步阶段。我试图测试代码是否可以简单地显示活动是否完成,但它不会改变任何东西。一切对我来说都很好,我不知道错误是在表单中,在保存表单的视图中还是在其他任何地方。我已经尝试更改表单的小部件和字段,但没有成功。

模型.py:

from django.db import models
from django.contrib.auth.models import User


class Activity(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    is_complete = models.BooleanField()

    def __str__(self):
        return self.title

表格.py:

from .models import Activity


class ActivityUpdateForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['is_complete']

视图.py:

from .models import Activity
from .forms import ActivityUpdateForm


def home(request):
    acts = Activity.objects.all()

    if request.method == 'POST':
        form = ActivityUpdateForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('home')
    else:
        form = ActivityUpdateForm()
    
    context = {
        'acts': acts,
        'form': form,
    }

    return render(request, 'diary/home.html', context)

模板:

{% for act in acts %}
    <form method="POST">
        {% csrf_token %}
        <p>{{ act.title }}</p>
        <p>Is complete: {{ act.is_complete }}</p>
        {{ form }}
        <p>{{ act.author }}</p>
        <button type="submit">Submit</button>
    </form>
{% endfor %}```

标签: pythondjangoweb

解决方案


这并不优雅,但您可能只需要这样做:

data = Activity.objects.get(author=request.user)
data.is_complete = form.cleaned_data["is_complete"]
data.save()

请删除form.save()并编写上面的代码。我不确定这是否有效,但请试一试。


推荐阅读