Ключ (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)