gpt4 book ai didi

python - Django 管理列表编辑

转载 作者:行者123 更新时间:2023-11-28 18:40:05 29 4
gpt4 key购买 nike

我在将 admin list_editable 与限制性自定义管理器一起使用时遇到了一些奇怪的行为。每次我尝试在管理员中保存列表更改时,我都会收到消息:请更正以下错误。

关于如何消除此错误消息的任何建议?

这是一个最小的示例:

模型.py

from django.db import models

class RestrictedManager(models.Manager):
def get_queryset(self):
return super(RestrictedManager, self).get_queryset().none()


class MyModel(models.Model):
on = models.BooleanField()

objects = RestrictedManager()
all_objects = models.Manager()

admin.py

from django.contrib.admin import ModelAdmin, site
from models import MyModel

class MyModelAdmin(ModelAdmin):
list_editable = ('on',)
list_display = ('id', 'on',)

def get_queryset(self, request):
return MyModel.all_objects

site.register(MyModel, MyModelAdmin)

如果您想知道,为什么我要使用 none() 默认查询集,我没有。我使用 none() 只是为了简化示例。默认管理器过滤掉的任何对象都会出现此问题。

最佳答案

我还没有对此进行测试,但问题可能在于您覆盖了默认管理器。

来自 Django 文档:Default managers

If you use custom Manager objects, take note that the first Manager Django encounters (in the order in which they’re defined in the model) has a special status. Django interprets the first Manager defined in a class as the “default” Manager, and several parts of Django (including dumpdata) will use that Manager exclusively for that model. As a result, it’s a good idea to be careful in your choice of default manager in order to avoid a situation where overriding get_queryset() results in an inability to retrieve objects you’d like to work with.

因此,首先使用您的“UnrestrictedManager”,然后使用您的自定义管理器应该可以解决问题。

关于python - Django 管理列表编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27341418/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com