Форум сайта python.su
Добрый день!
Столкнулся с не слишком понятной проблемой при сохранении базы данных.
Есть модель (общая структура не важна), имеющая отношения на саму себя:
class TaskModel(models.Model): task_before = models.ForeignKey('self', blank=True, null=True, related_name="before") tasks_after = models.ManyToManyField('self', blank=True, null=True, related_name="after")
TasksAfter = TaskModel.objects.filter(task_before=Task).exclude(code=Task.code) for task in TasksAfter: Task.tasks_after.add(task)
Task.tasks_after.remove(Task.task_before)
Отредактировано fongostev (Апрель 13, 2014 08:20:49)
Офлайн
Напишите тест и все поймете.
Офлайн
fongostev
На первый взгляд все должно работать, но неожиданно в ManyToManyField оказывается помимо значений из TasksAfter еще и значение task_before. Мне непонятны причины такого поведения на первый взгляд прозрачного кода.
TasksAfter = TaskModel.objects.filter(task_before=Task).exclude(code=Task.code)
for task in TasksAfter.task_after: Task.tasks_after.add(task)
Офлайн
PanovSergeyТесты показывают, что что-то ломается на этапе сохранения. Т.е. foreign key сохраняется нормально, для manytomany формируются правильные наборы объектов, а после сохранения внезапно значение из foreign key оказывается в manytomany. Ничего не понимаю.
Напишите тест и все поймете.
Task.tasks_after.remove(Task.task_before)
Офлайн
AlenТак мне и нужна выборка моделей с отношением к текущему объекту
Вы же делаете выборку записей со всеми полями.
Для получения значений только из поля task_after, должно быть как-то так:
Офлайн