首页 > 解决方案 > 更新 django 字段中的状态 - status CHOICES

问题描述

我有一个模型 django,我想更新我的字段状态选择:

我的模型.py

class Top(core.BaseModel):
    class Status(models.IntegerChoices):
        EMPTY = 0,'-----'
        SEND_CANCEL = 1, 'Send'
        CANCELLED = 2, 'Cancel'


  status = models.PositiveSmallIntegerField('Status', choices=Status.choices, default='')

我的意见.py

class TopUpdateView(core.UpdateView):
    template_name = 'top/update_top.html'
    form_class = UpdateTopForm

@require_POST
def cancel_status(request, pk, status):
    top = get_object_or_404(Top, pk=pk, status=None, user=request.user)
    top.status= status.CANCELLED
    top.save(update_fields=['status'])
    return redirect('top:item-detail')

网址.py

path('top/<pk>/cancel/', views.cancel_status, name='cancel-status'),

模板:

<button class="btn">
        <a href="{% url 'top:cancel-status' object.id %}">
          Cancel
      </button>

我在这里想要的只是当我点击按钮时从 EMPTY on CANCELED 更新 CHOICE 字段状态。但这是行不通的((((我知道如何更新和保存简单字段,但不了解更新选项字段的最佳方式。任何人请帮助我!

标签: djangodjango-modelsdjango-views

解决方案


你需要提交一个 POST 请求,你可以这样做:

<form method="POST" action="{% url 'top:cancel-status' object.id %}">
  <button type="submit" class="btn">Cancel</button>
</form>

在您看来,您应该使用Top.Status.EMPTY来设置status字段:

@require_POST
def cancel_status(request, pk, status):
    top = get_object_or_404(Top, pk=pk, status=None, user=request.user)
    top.status= Top.Status.CANCELLED
    top.save(update_fields=['status'])
    return redirect('top:item-detail')

您的Top模型当然应该有一个status包含以下选项的字段:

class Top(core.BaseModel):
    class Status(models.IntegerChoices):
        EMPTY = 0,'-----'
        SEND_CANCEL = 1, 'Send'
        CANCELLED = 2, 'Cancel'
    
    status = status = models.PositiveSmallIntegerField(
        'Status',
        choices=Status.choices,
        default=Status.EMPTY
    )

推荐阅读