Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理员列表编辑_Python_Django_Django Forms_Django Admin - Fatal编程技术网

Python Django管理员列表编辑

Python Django管理员列表编辑,python,django,django-forms,django-admin,Python,Django,Django Forms,Django Admin,我在对自定义管理器使用adminlist\u editable时遇到了一些奇怪的行为。每次我试图在admin中保存列表更改时,我都会收到一条消息:请更正下面的错误 关于如何消除此错误消息,有什么建议吗 以下是一个最小的示例: 型号.py from django.db import models class RestrictedManager(models.Manager): def get_queryset(self): return super(RestrictedM

我在对自定义管理器使用admin
list\u editable
时遇到了一些奇怪的行为。每次我试图在admin中保存列表更改时,我都会收到一条消息:请更正下面的错误

关于如何消除此错误消息,有什么建议吗

以下是一个最小的示例:

型号.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()
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)
admin.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()
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()
defaultqueryset,我没有。我使用
none()
只是为了简化示例。默认管理器过滤掉的任何对象都会出现此问题。

我通过使用简单管理器创建代理模型解决了此问题

class UnrestrictedMyModel(MyModel):
    objects = models.Manager()

    class Meta:
        proxy = True

site.register(UnrestrictedMyModel, MyModelAdmin)

但是我仍然在寻找更好的解决方案。

我还没有测试过这个,但问题可能是,您已经覆盖了默认的管理器

从Django文档:

如果使用自定义管理器对象,请注意第一个管理器Django遇到的对象(按照它们在模型中定义的顺序)具有特殊状态。Django将类中定义的第一个管理器解释为“默认”管理器,Django的几个部分(包括dumpdata)将专门为该模型使用该管理器。因此,在选择默认管理器时要小心,以避免覆盖get_queryset()导致无法检索您想要使用的对象的情况


因此,首先使用您的“无限制管理器”,然后使用您的自定义管理器应该可以实现这一目的。

检查您是否将所有的
列表显示为
可编辑的
。
你可以:

  • 将一个
    list\u editable
    字段添加到
    list\u display\u links
  • id
    添加到
    列表\u显示中

  • 看来我的方法被Django阻止了。谢谢这似乎已经过时了,因为django.contrib.admin中不再有ModelAdmin。