Создание отношений между двумя моделями после того, как обе модели были созданы.(Python, Django, SQLite) - PullRequest
0 голосов
/ 17 апреля 2019

Объяснение на основе учебника django для создания библиотеки:

Допустим, вы разрешаете пользователю добавлять модель Book в базу данных вашей библиотеки. Однако вы не хотите, чтобы они добавили модель Genre к Book. Вместо этого в вашей базе данных уже есть модель Genre со всеми перечисленными Genre в мире. Когда пользователь добавляет Book в вашу базу данных, вы хотите, чтобы ваша база данных добавила правильные Genre в Book на основе текста в сводке Book. Скажем, у Book есть резюме с именем TextField и слова science и fiction при создании книги. Затем база данных добавит Genre из science fiction к вашей книге на основе слов, найденных в сводке книги TextField. Для меня это не имеет значения, происходит ли это в момент создания книги или сразу после нее.

Я пытаюсь сделать то же самое с веб-сайтом, который занимался бы регистрацией / созданием тренировок. Когда пользователь добавляет workout (то есть книгу в библиотеку) в базу данных, я бы хотел, чтобы база данных добавила movement (то есть жанр для книг) к тренировке в зависимости от того, какой текст находится в тренировке TextField , Пример ниже:

Я добавляю тренировку на веб-сайт со следующей информацией как TextField:

5 раундов:

  • 15 Pull Ups
  • 30 приседаний
  • 200 м. Бег

Затем я хочу, чтобы база данных создала правильную связь между экземпляром тренировки и моделями движения, которые используются в TextField экземпляра тренировки: подтягивание, приседание и бег.

Таким образом, я могу искать в базе данных по тренировкам, которые содержат подтягивания, приседания или бега, и эта тренировка появится. Каждая модель движения также содержит «Классификацию» ForeignKey верхней части тела, нижней части тела и т. Д. Таким образом, поиск также может быть выполнен для тренировок, которые предназначены только для верхней части тела и т. Д.

У меня вопрос, как бы я реализовал модельные отношения между Тренировкой, Движением и Классификацией? Я не думаю, что могу использовать отношения ForeignKey или ManytoMany между workout и movement, потому что они оба должны быть добавлены одновременно. Другими словами, пользователь должен будет ввести тренировку в TextField, а затем добавить, какие движения в тренировке. Я хочу, чтобы это был один шаг для пользователя. Они вводят в тренировку, база данных добавляет отношение к движениям в тренировке на основе того, что пользователь ввел в TextField. Я предполагаю, что для того, чтобы эта функциональность работала, должны быть созданы отношения между тренировкой и моделью движения после создания модели тренировки, а не во время. Однако я не уверен, как создать эту функцию на уровне базы данных.

В настоящее время я использую SQLite в качестве базы данных, так как он используется по умолчанию в Django.

Есть предложения?

1 Ответ

0 голосов
/ 17 апреля 2019

С помощью этого кода ваши пользователи смогут выбирать движения и bodyPart самостоятельно:

from django.db import models

movement_tuple = (
    ('Pulls up', 'Pulls up'),
    ('Squats', 'Squats'),
    ('Run', 'Run')
)

body_part = (
    ('Upper Body', 'Upper Body'),
    ('Lower Body', 'Lower Body')
)

class Workout(models.Model):
    name = models.CharField(max_length=50, default=None)
    movement = models.CharField(max_length=30, choices=movement_tuple)
    body_part = models.CharField(max_length=30, choices=body_part)
    value = models.CharField(max_length=30)

    def __str__(self):
        return(self.name)

кортежи должны сделать выбор возможным

...