首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单击按钮不更新django中的视图

单击按钮不更新django中的视图
EN

Stack Overflow用户
提问于 2020-07-06 08:30:01
回答 1查看 63关注 0票数 0

我有一个带有任务列表的视图,并试图在单击时进行简单的任务分配,但它不起作用。你能支持一下吗?我在控制台中看到类似这样的东西:"POST /task/allocate HTTP/1.1“3020。谢谢。

型号:

代码语言:javascript
运行
复制
class Task(models.Model):
name = models.CharField(max_length=248)
note = models.TextField(blank=True, null=True)
priority = models.NullBooleanField(blank=True, null=True)
status = models.IntegerField(choices=TASK_STATUS, default=TASK_STATUS[0][0])
placed_date = models.DateField(auto_now=True)
due_date = models.DateTimeField(blank=True, null=True)
completed = models.BooleanField(default=False)
completed_date = models.DateField(blank=True, null=True)
created_by = models.ForeignKey(
    User,
    null=True,
    blank=True,
    related_name="hana_created_by",
    on_delete=models.CASCADE)
assigned_to = models.ForeignKey(User,
    null=True,
    blank=True,
    related_name="hana_assigned_to",
    on_delete=models.CASCADE)

urls:

代码语言:javascript
运行
复制
 path('excel_table', ex_views.ExcelTableView.as_view(), name = "excel-table"),
path("task/add", ex_views.TaskAddView.as_view(), name="task-add"),
path("task/<int:task_id>/", ex_views.TaskDetailView.as_view(), name="task-detail"),
path("task/<int:pk>/edit", ex_views.TaskEditView.as_view(), name="task-update"),
path("task/allocate", views.task_allocator, name="task-allocate"),

视图:

代码语言:javascript
运行
复制
class TaskAllocateView(View):
def post(self, request):
    if request.POST.get("task_allocate") is not None:
        tasks = Task.objects.filter(assigned_to=None)
        for task in tasks:
            task.assigned_to = random.choice(User.objects.all())
            task.status = 1
            task.save()
            current_site = get_current_site(request)
            subject = render_to_string('email/assigned_subject.txt', {"task": task})
            body = render_to_string('email/assigned_body.txt', {
                'task': task,
                'site': current_site,
            })
            to_email = task.assigned_to.email
            email = EmailMessage(subject, body, to=[to_email])
            email.send()
        if tasks:
            messages.success(request, "Tasks succesfully allocated to your employees. Check status!")
            messages.success(request, ('Notification email has been sent to assignees!'))
        else:
            messages.warning(request, "All tasks already allocated!")
            messages.warning(request, ('Notification email already sent!'))

        return redirect(reverse("excel-table"))
    return redirect(reverse("excel-table"))

模板:

代码语言:javascript
运行
复制
<form method="POST" action="{% url "task-allocate" %}" role="form" class="d-inline">
        {% csrf_token %}
        <div style="display:inline;">
          <button class="btn btn-info btn-sm" type="submit" name="task_allocate">
           Task Allocate
          </button>
        </div>
      </form>
EN

回答 1

Stack Overflow用户

发布于 2020-07-06 11:21:26

代码语言:javascript
运行
复制
if t.assigned_to != None:
    t.status = 1
    t.save()
    messages.success(request, "Tasks succesfully allocated to your employees. Check status!")
    return redirect(reverse("excel-table"))

这个if将永远不会被执行,因为在你保存它之前,created_by将保持为空。

代码语言:javascript
运行
复制
t.assigned_to = random.choice(User.objects.all())
    if t.assigned_to != None:

你这样做的想法是,这个t.assigned_to不再是None,它仍然是None,因为你没有保存。

希望这篇文章能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62747721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档