首页 > 解决方案 > 无法使用 MongoDB 从 Django 管理面板中删除对象

问题描述

我有一个使用由 Djongo 连接的 MongoDB 的 Django 项目。我创建了一个简单的模型,如下所示:

from django.db import models

# Create your models here.
class Property(models.Model):
    name = models.CharField(max_length=128, blank=False)
    property_type = models.CharField(max_length=24, blank=True)
    include_on = models.CharField(max_length=256, blank=True)
    format_example = models.TextField(blank=True)
    notes = models.TextField(blank=True)

admin.site.register(Property)使用文件中的行注册模型后,admin.py我最终看到我的模型出现了。添加测试后,Property我看到了这条线

The property “Property object (61226db9f4f416b206c706e5)” was added successfully.

这告诉我该项目已添加。它也出现在管理面板上,但看起来像:

Property object (None)

如果我选择该属性,我会收到一条错误消息:

Property with ID “None” doesn’t exist. Perhaps it was deleted?

如果我尝试删除该属性,我会收到以下ValueError错误:

Field 'id' expected a number but got 'None'.

由于我目前正在学习 Django/MongoDB,我实际上曾经遇到过 ValueError。解决方法是删除整个数据库并重新开始。问题是我不想在未来遇到这个问题,我想知道我必须做些什么来修复它,或者纠正我做错了什么。

标签: pythondjangomongodb

解决方案


我找到了我的答案。原来我需要分配一个主键。我通过将模型更改为..来解决此问题

class Property(models.Model):
    name = models.CharField(primary_key=True, max_length=128, blank=False)
    property_type = models.CharField(max_length=24, blank=True)
    include_on = models.CharField(max_length=256, blank=True)
    format_example = models.TextField(blank=True)
    notes = models.TextField(blank=True)

推荐阅读