首页 > 解决方案 > 当我以管理员身份尝试删除与 Django 应用程序中的另一个对象相关的对象时,如何解决发生的错误?

问题描述

我有一个名为 Customer 的类:

class Customer(models.Model):
    # One to one relationship: customer is a user
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200)

    # Returns the string representation of an object
    def __str__(self):
        return self.name

...还有一个名为 Order 的类(客户可以有很多订单)。

class Order(models.Model):
    objects = None
    # many to one relationship: customer can have many orders
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
    date_order = models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False, null=True, blank=False)
    transaction_id = models.CharField(max_length=200, null=True)

    # You can access the parent class from inside a method of a child class by using super()
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.id = None

    def __str__(self):
        return str(self.id)

当我试图删除我创建的名为 Kasia 的类 Customer 的对象(可能也是超级用户)时,我做不到。我之前已经删除了这个客户的订单,现在它们被设置为 Null 值。有一个类型错误和一条消息:“没有主键值的模型实例是不可散列的”。异常位置如下:C:\Users\kasia\AppData\Roaming\Python\Python37\site-packages\django\db\models\base.py, line 536, in hash

当我想删除用户时,也会发生同样的事情。这里发生了什么?

标签: pythondjango

解决方案


我认为发生这种情况是因为您设置id = None了尝试删除此功能并查看会发生什么

    def __init__(self, *args, **kwargs):
       super().__init__(*args, **kwargs)
       self.id = None

推荐阅读