【发布时间】:2017-08-12 15:05:59
【问题描述】:
假设我有以下模型:
class Student(models.Model):
name = models.CharField(max_length = 100)
...
当我尝试在 only() 上调用 delete() 方法时,例如:
Student.object.filter(pk__in=[1, 5, 6]).only('id', 'name').delete()
我收到以下错误:
DoesNotExist: Student matching query does not exist
我的问题是:我们不能在 only() 上调用 delete() 吗?
注意:我们在 Django 管理员的 get_queryset() 方法上使用 only() 以获得更好的性能。
为了您的信息,我的管理员看起来像:
class StudentAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(StudentAdmin, self).get_queryset(request)
return qs.only('id', 'name', ...)
当我们尝试从 Admin 中删除对象时,我们会收到此错误。
【问题讨论】:
-
模型的主要字段是什么? Django 使用主键与对象交互。您可能不会将其包含在
only()中 -
DoesNotExists 仅在
Model.objects.get()中提出。因此,如果您使用 get early 编写了相同的代码..您的服务器是否已重新启动?如果问题在重新启动后也消失了..删除所有 *.pyc 文件。我试过只删除它,它对我来说效果很好。很遗憾无法在此处为您发布。 -
@ThulasiRam,我想,你误解了这个问题。我说的是only() method
-
@AndreyShipilov,此模型中没有主键。因此,默认情况下 id 是主键。正如我所提到的,id 字段包含在 only 调用中。
标签: django django-admin django-orm