LINUX.ORG.RU

Django и удаление связанных полей

 , , ,


0

1

Всем здасьте!

Есть модель:

class A(models.Model):
    ...

class B(models.Model):
    ...
    field_1 = models.ForeignKey(A, related_name="field_1", blank=True, null=True)
    field_2 = models.ForeignKey(A, related_name="field_2", blank=True, null=True)
    ...

При вызове метода delete() для объекта модели A автоматически удаляются и все связзанные с нею объекты модели B. В документации по django нашел способ корректного удаления связанных моделей (для FK) - https://docs.djangoproject.com/en/dev/ref/models/relations/

a_obj = A.objects.get(id=xxx)
b_obj = B.objects.get(filed_1=a_obj)

b_obj.a_set.remove(a_obj)

AttributeError: 'B' object has no attribute 'a_set'

Понятно, что такого пол нет. Но почему не работает поиск связанных объктов по _set ? Как удалить такое Г?

Заранее спасибо.


Покажи нормальный код без замены имен моделей. А то не удобно читать. Может у тебя там просто опечатка.

pi11 ★★★★★
()
Ответ на: комментарий от pi11

Покажи нормальный код без замены имен моделей. А то не удобно читать.

На суть проблемы не влияет. А так, читать даже удобнее, ИМХО.

Может у тебя там просто опечатка.

Опечатки нет, проверял много раз.

djnoob
() автор топика
Ответ на: комментарий от djnoob

Подозреваю, что это related_name все портит.

djnoob
() автор топика
Ответ на: комментарий от pi11

Полагаю, это сработает, но, как-то костыльно. Мне нужно удальть объект модели A без удаления связанного с ним объекта модели B. Как?

djnoob
() автор топика
Ответ на: комментарий от djnoob

Так вроде я понял. Но лучше было не править код, а то я запутался в a /b.

Если не путаю опять, то надо как-то так -

a_obj = A.objects.get(id=xxx)
b_obj = B.objects.get(filed_1=a_obj)

a_obj.field1_set.remove(b_obj)
pi11 ★★★★★
()
Ответ на: комментарий от pi11

Да, понял уже). Спасибо за отклик.

djnoob
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.