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

时间:2015-02-25 23:55:13

标签: django django-models django-admin

我正在努力创建一些自定义操作,以便从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。如果你愿意,可以看看这些照片。我基本上是逐字逐句地跟踪文档,并且想知道是否有人对我缺少的内容有任何见解。

Data Display as None

Proper Data 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)

1 个答案:

答案 0 :(得分:0)

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

因此,您可以将选项列表更改为:

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

请注意,此列表中缺少“已删除”选项。

或者您将数据库中的数据更改为值“d”等。