如何在 Django 中增加 IntegerField?

Ara*_*han 5 python django

我正在 Django 中制作一个待办事项列表 Web 应用程序。我刚刚学习 Django,而且还是个新手,所以非常感谢任何帮助。我的问题:

我的应用程序将允许用户注册,并且他们可以拥有自己的个人资料。他们可以根据需要创建待办事项并删除它们。现在,我想向所有用户介绍一个名为“todos”的属性。这基本上是一个整数值,用于跟踪他们自注册以来创建的待办事项数量。每次用户添加一个新任务时,我都希望这个值增加 1。我似乎不知道如何实现这个。

这是我的models.py

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

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default="default.jpg", upload_to="profile_pics")
    todos = models.IntegerField(default=0)

    def __str__(self):
        return f"{self.user.username} Profile"


    def save(self):
        super().save()

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)
Run Code Online (Sandbox Code Playgroud)

views.py

class TodoListView(ListView):
    model = ToDo
    template_name = "ToDo/home.html"
    context_object_name = "todos"
    ordering = ["-date_posted"]


class TodoCreateView(CreateView):
    model = ToDo
    fields = ["title"]
    success_url = reverse_lazy("todo-home")

    def form_valid(self, form):
        form.instance.creator = self.request.user
        user = User.objects.get(username=self.request.user.username)
        user.profile.todos += 1
        return super().form_valid(form)
Run Code Online (Sandbox Code Playgroud)

在该form_valid方法中,我尝试增加该值,但这似乎不起作用。由于我可以访问管理面板,因此我可以看到添加新任务时,计数todos不会增加。

我正在寻找一种可以增加该值的方法,并且可以在需要时方便地调用它。todos此外,如果有人可以展示如何在模板中获取此计数,以便我可以在 Html 中使用此值,那将非常有帮助。谢谢。

Ste*_*pes 4

您缺少 form_valid 方法中的 save 方法

class TodoListView(ListView):
    model = ToDo
    template_name = "ToDo/home.html"
    context_object_name = "todos"
    ordering = ["-date_posted"]


class TodoCreateView(CreateView):
    model = ToDo
    fields = ["title"]
    success_url = reverse_lazy("todo-home")

    def form_valid(self, form):
        form.instance.creator = self.request.user
        user = User.objects.get(username=self.request.user.username)
        user.profile.todos += 1
        user.profile.save()
        return super().form_valid(form)

Run Code Online (Sandbox Code Playgroud)

如果您希望从模板中访问这些内容,则可以user.profile.todos直接使用。EG{{ user.profile.todos }}{% if user.profile.todos > 1 %}More than one{% endif %}