Ключ (id)=() все еще ссылается из таблицы для поля "один на один".

У меня есть 1 к 1 поле в моей модели, где мне все еще нужно связать данные с другими, пока я удаляю их в другой таблице. В моем представлении я удаляю экземпляр модели 2, пока он удаляется, я устанавливаю completed в Tue, но это вызывает ошибку.

models.py

class Model1(models.Model):
    model_2_attribute = models.OnetoOneField('Model2' on_delete=models.DO_NOTHING)
    completed = model.BooleanField(default=False)

Не хватает значения по умолчанию или возможности для model_2_attribute быть нулевым. Если вы удалите Model2, то Model1 будет иметь недопустимое отношение.

Вариант 1 заключается в том, чтобы установить значение по умолчанию равным null. Если вы удалите Model2, то model_2_attribute будет None.

class Model1(models.Model):
    model_2_attribute = models.OneToOneField('Model2', on_delete=models.SET_NULL, blank=True, null=True)

Вариант 2 заключается в том, чтобы переместить поле completed в Model2 и не удалять его. Вместо этого только установите поле в True.

class Model1(models.Model):
    model_2_attribute = models.OneToOneField('Model2', on_delete=models.DO_NOTHING)

class Model2(models.Model):
    # your fields
    completed = model.BooleanField(default=False)

Затем вы можете отфильтровать незавершенные объекты следующим образом:

qs = Model1.objects.filter(model_2_attribute__completed=False)
Вернуться на верх