Временные данные Django Model Table против постоянных данных - PullRequest
2 голосов
/ 31 января 2012

Я пишу планировщик поездки, и у меня есть пользователи. Для целей этого вопроса давайте предположим, что мои модели так же просты, как и модель «Trip» и модель «UserProfile».

Существует функциональность сайта, которая позволяет искать маршруты (через внешние API), а затем динамически собирает их в «поездки», которые мы затем отображаем. Новый поиск удаляет все старые «поездки» и выясняет новые.

Моя проблема заключается в следующем: я хочу сохранить некоторые из этих поездок в профиле пользователя. Если пользователь выбирает поездку, я хочу, чтобы он был постоянно связан с этим профилем. В настоящее время у меня есть поле ManyToMany для поездок в моем UserProfile, но когда поездки очищаются / очищаются, все поездки удаляются, и эта связь бесполезна. Мне нужен пользователь, чтобы я смог вернуться через месяц и увидеть эту поездку.

Я ищу простой способ дублировать данные поездки или сделать их статичными, как только я добавлю их в профиль. .. Я не совсем знаю, с чего начать. В настоящее время он настроен так, что существует таблица данных trips_profile, которая имеет внешний ключ к таблице «trip». , , это было бы хорошо, если бы мы не удаляли / очищали таблицу поездок все время.

Помощь оценена.

1 Ответ

2 голосов
/ 31 января 2012

Трудно сказать точно без ваших моделей, но с учетом следующего макета:

class UserProfile(models.Model):
    trips = models.ManyToManyField(Trip)

Вы можете убрать бесполезные Trip s, выполнив:

Trip.objects.filter(userprofile__isnull=True).delete()

Что будетудаляются только Trip s, не присвоенные UserProfile.

Однако, учитывая следующий макет:

class Trip(models.Model):
    users = models.ManyToManyField(User)

Вы можете убить бесполезные поездки с помощью:

Trip.objects.filter(users__isnull=True).delete()

Второй метод имеет дополнительное преимущество: он не требует никаких изменений UserProfile или даже UserProfile, поскольку вы можете просто получить User s трипов с:

some_user.trip_set.all()
...