Django管理员操作更新外键

时间:2014-08-14 21:51:32

标签: django django-admin

我在admin.py文件中添加了这个简单的操作。

def groupA(modeladmin, request, queryset):
    queryset.update(group=1)
groupA.short_description = "Group A"

//
class StudentAdmin(admin.ModelAdmin):
...
actions = [groupA]

到目前为止,一切都按预期进行。

问题是该组是一个外键,如果我可以做类似

的事情,它会更易于管理
def groupA(modeladmin, request, queryset):
    queryset.update(group="A")
groupA.short_description = "Group A"

我尝试使用下面的查询集,但没有运气。

     queryset.update(group__name="A")

我的群组模型看起来像这样:

class Group(models.Model):
    name = models.CharField(max_length=5, default='', blank=True)
    ....

    def __str__(self):
        return self.name

那么可以使用我的群组模型的 str 表示来执行管理操作吗?

2 个答案:

答案 0 :(得分:1)

为什么不导入群组模型,获取群组A并更新所有内容?

def groupA(modeladmin, request, queryset):
    from models import Group
    g = Group.objects.get(name="Group A")
    queryset.update(group=g)

答案 1 :(得分:1)

我遇到了同样的问题,并注意到@metraon 实际上找到了一个不错的片段,但它仅在评论中。这段代码对我来说就像一个魅力,尽管现在已经过去了 7 年,所以我想通过将其发布为答案来使其更容易找到。

这是 metraon 在 https://djangosnippets.org/snippets/1836/ 找到的片段:

def create_action(quality):
    def action(modeladmin, request, queryset): queryset.update(quality=quality)
    name = "mark_%s" % (quality,)
    return (name, (action, name, "Mark selected as %s quality" % (quality,)))

class PackageAdmin(admin.ModelAdmin):
    list_display = ('name', 'quality')
            
    def get_actions(self, request):
        return dict(create_action(q) for q in models.Quality.objects.all())