更新 django 字段中的状态 - status CHOICES

Posted

技术标签:

【中文标题】更新 django 字段中的状态 - status CHOICES【英文标题】:Update status in django field - status CHOICES 【发布时间】:2021-10-06 00:11:55 【问题描述】:

我有一个模型 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')

urls.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 字段状态。但它不起作用(((( 我知道如何更新和保存简单字段,但不了解在视图中更新选项字段的最佳方式。任何人请帮助我!

【问题讨论】:

您能否提供更多有关您的Top 模型的详细信息?尤其是存储状态的字段? 【参考方案1】:

你需要提交一个 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
    )

【讨论】:

以上是关于更新 django 字段中的状态 - status CHOICES的主要内容,如果未能解决你的问题,请参考以下文章

使用 phpmyadmin 自动更新表中的字段

如何根据具有外键关系的另一个模型更新 Django 模型的字段

更新 Laravel 列中的字段

Django:在模板中选择带有默认字段的选项

Django 模型 - 在选择字段中更改选项并迁移

Django 通过外键或其他字段引用模型