Как исправить ошибку, которая возникает, когда я пытаюсь удалить объект, связанный с другим объектом в приложении 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)

Когда я пытаюсь удалить созданный мной объект класса Customer с именем Kasia (который, вероятно, является также суперпользователем), я не могу этого сделать. Я ранее удалил заказы этого клиента и теперь они имеют значение Null. Возникает ошибка типа и сообщение: 'Model instances without primary key values are unhashable'. Местонахождение исключения следующее: C:\Users\kasia\AppData\Roaming\Python\Python37\site-packages\django\db\models\base.py, строка 536, in hash

Когда я хочу удалить пользователя, происходит то же самое. Что здесь происходит?

Думаю, это происходит потому, что вы установили id = None попробуйте удалить эту функцию и посмотрите, что произойдет

    def __init__(self, *args, **kwargs):
       super().__init__(*args, **kwargs)
       self.id = None
Вернуться на верх