2016-12-13 2 views
0

Этот вопрос может быть глупым, но мне нужно его проверить из сообщества SO.Удаление объектов в Django с внешним ключом в нем

У меня есть 2 модели.

class Address(models.Model): 
    name = models.CharField(max_length=100) 
    area = models.ForeignKey(Area, null=True) 


class Area(models.Model): 
    name = models.CharField(max_length=20) 

Теперь если я хочу, чтобы удалить один экземпляр адреса, будет удалить экземпляр объекта Area это указывает на в качестве внешнего ключа?

address = Address.objects.filter(...).delete() 

PS: Я знаю, что on_delete функциональность Django.It требуется, когда внешний ключ объект удаляется и предотвратить те объекты, указывающие на этот внешний ключ, используется этот параметр. В моем случае сценарий обратный.

ответ

1

Нет, он не удалит строку Area, так как ее поле для внешней клавиши. Таким образом, при удалении экземпляра адреса соответствующий экземпляр area не будет удален, если вы не переопределите метод модели delete для удаления экземпляра.

0

Это распространенное сомнение для тех, кто начинает изучать операции с базой данных.

Как вы уже упоминали, в django есть on_delete, который отличается.

Сначала мы должны понимать, что такое Запасной ключ есть. Это еще одна таблица, в которой хранится набор данных. Скажем, у нас есть запись для адрес1 с областью area1. Аналогичным образом я создаю адрес address2 с той же областью area1. Теперь, если удаление address1 удаляет area1, то тогда понятие отношения другого экземпляра не достигается. Это вообще внешний ключ просто определяет новую модель в базе данных. Вам придется удалить экземпляр FK, переопределив метод по умолчанию. Иначе он не удалит экземпляр FK.

1

Не влияет на Area. Однако, если вы удалили Area, то Address будет удален (поскольку поведение по умолчанию on_delete является каскадом).

Смежные вопросы