2016-12-22 1 views
0

У меня есть модель наследования в Джанго что-то вроде этого:Django унаследовал модели не полностью удалены

class A(models.Model): 
name = models.CharField (max_length = 255, unique = True) 

class B(A): 
desc = models.CharField (max_length = 255) 

и при выполнении удаления на B оставляет след «мусора» заходы из А позади.

obj = B.objects.create(name = "My", desc = "left overs") 
obj.delete() 

теперь я не могу изменить модель, чтобы иметь т 1to1 FK-А вместо наследования, потому что это уже работает программное обеспечение. Есть ли хороший способ сделать правильное удаление?

Спасибо заранее!

ответ

0

К сожалению, в этом случае у вас есть две таблицы, не имеющие отношения друг к другу.

Наследование не означает отношения FK; это просто означает, в буквальном смысле слова:

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

Наследование по-прежнему создает исходную таблицу, если вы не пройти abstract = True к родительской модели.

Чтобы окончательно решить эту проблему, необходимо сделать миграцию базы данных, а затем либо [а] удалить таблицу A и добавьте abstract = True к его определению или [б] создать правильный внешний ключ.

В настоящем время, что вы можете сделать, это найти все A «S, которые не имеют какой-либо B» S и удалять их. К сожалению, в этом нет никакого трюка, вам придется сделать это очень неэффективно:

for obj in A.objects.all(): 
    if not obj.b_set.all(): 
     obj.delete()