为管理面板创建自定义操作将显示值设置为 (None)

Creating Custom Actions for Admin Panel sets displayed values to (None)

我正在努力创建一些自定义操作以从 django 管理面板对我的数据执行。我在 models.py 中定义了这样的操作:

EX_MODERATION_CHOICES = (
('c', 'Check'),
('d', 'Display'),
('p', 'Pending'), )

并将以下内容添加到相应的模型字段中:

class Experience(models.Model):
    ...
    ex_moderationstatus = models.CharField(db_column='EX_ModerationStatus', max_length=1, choices=EX_MODERATION_CHOICES)                                 

当我点击管理面板并查看数据时,它显示的值设置为 (None)。选择特定 ID 时,我可以看到要编辑的字段是一个下拉菜单,其中包含 EX_MODERATION_CHOICES 作为选项。我认为问题出在这里,只是不清楚解决方案。

如果我从列中删除选择字段,它会按照我的预期使用数据库中的正确值显示,例如 Display。如果你愿意,可以看看照片。我基本上是逐字逐句地遵循文档,想知道是否有人对我遗漏的内容有任何见解。

我在 admin.py 中注册了这样的操作:

def make_moderation_status_pending(self, request, queryset):
    rows_updated = queryset.update(ex_moderationstatus='p')

    if rows_updated == 1:
        message_bit = "1 Experience was"
    else:
        message_bit = "%s Experiences were" % rows_updated
    self.message_user(request, "%s successfully marked as Pending." % message_bit)

您数据库中的数据与选择不一致。如果删除选项字段,它应该显示选项可迭代中的第一个字符串——它应该显示 "d" 而不是 "Display"。第一个元素是存储在数据库中的内容(docu)

因此,要么将选择列表更改为:

EX_MODERATION_CHOICES = (
('Check', 'Check'),
('Display', 'Display'),
('Pending', 'Pending'), )

请注意,此列表中缺少 "Deleted" 个选项。

或者您将数据库中的数据更改为值"d"等