Django - Как случайным образом выбирать объекты на основе ввода из формы?
Я пытаюсь создать базовый планировщик тренировок, где вы должны ввести в форму некоторую информацию, и на основе этой информации будет создан персональный планировщик. Я создал модель, где я ввел все упражнения, и на какое движение они направлены.
Если пользователь решил заниматься 2 раза в неделю, будет сгенерировано 2 дня с 6 определенными движениями каждый день. Каждое движение имеет несколько упражнений, но только одно упражнение будет выбрано случайным образом и показано в планировщике. Таким образом, у вас будет 6 различных упражнений каждый день. Если пользователь выберет 3x неделю, то будет 3 дня с 6 другими упражнениями, и так далее.
.
Я пытался найти способ случайного выбора и генерации этих упражнений, но не могу. Я не могу просто использовать случайный выбор, потому что у меня есть условие, при котором каждая частота, выбранная по форме, должна следовать определенному графику движений.
Поэтому я решил жестко закодировать его и написать каждое условие, строка за строкой. Но это приведет к большому количеству строк кода.
И это не единственная проблема. При этом каждый раз, когда я перезагружаю страницу, название упражнений меняется. Он продолжает случайным образом выбирать новые упражнения. Может быть, мне следовало сделать класс Exercise по-другому, или я не знаю. Мне кажется, я что-то упускаю, и все могло бы быть намного проще.
Вот мои модели:
class Generator(models.Model):
GOAL = (
('Strength', 'Strength'),
('Hypertophy', 'Hypertophy'),
('Endurance', 'Endurance')
)
FREQUENCY = (
('2X week', '2X week'),
('3X week', '3X week'),
('4X week', '4X week'),
('5X week', '5X week'),
('6X week', '6X week')
)
PERIOD = (
('10 weeks', '10 weeks'),
('12 weeks', '12 weeks')
)
goal = models.CharField(max_length=12, choices=GOAL)
frequency = models.CharField(max_length=12, choices=FREQUENCY)
period = models.CharField(max_length=12, choices=PERIOD, default='12 weeks')
objects = models.Manager()
def __str__(self):
return self.frequency
class Exercise(models.Model):
name = models.CharField(max_length=150)
movement = models.CharField(max_length=150)
Focus = models.CharField(max_length=150)
objects = models.Manager()
def __str__(self):
return self.name
Вот мои функции представления на данный момент. Я сделал только небольшой пример того, что моя идея заключалась бы в кодировании каждого упражнения на каждый день (функция list_1). Если я последую этой идее, только "6x неделя" будет состоять из 36 строк кода.
def create(request):
generator = GeneratorForm()
if request.method == 'POST':
generator = GeneratorForm(request.POST)
if generator.is_valid():
generator.save()
return redirect('/planner/')
context = {'generator': generator}
return render(request, 'planner/create.html', context)
def list_1(request):
generator = Generator.objects.last()
if generator.frequency == '2X week':
days = Day.objects.filter(id__in=[1, 2])
exercises_1 = Exercise.objects.filter(movement='DeadLift Pattern').order_by['?']
exercises_2 = Exercise.objects.filter(movement='Horizontal Pushing').order_by['?']
exercises = [exercises_1, exercises_2]
if generator.frequency == '3X week':
days = Day.objects.filter(id__range=(1, 3))
if generator.frequency == '4X week':
days = Day.objects.filter(id__range=(1, 4))
if generator.frequency == '5X week':
days = Day.objects.filter(id__range=(1, 5))
if generator.frequency == '6X week':
days = Day.objects.filter(id__range=(1, 6))
if generator.period == '10 weeks':
weeks = Week.objects.exclude(id__in=[11, 12])
elif generator.period == '12 weeks':
weeks = Week.objects.all()
context = {'exercises': exercises, 'days': days, 'weeks': weeks}
return render(request, 'planner/list_1.html', context)
Возможно, мне следует создать классы моделей каким-то другим способом. Возможно, мне нужен класс модели для каждой частоты (2 раза в неделю, 3 раза в неделю и т.д.). Мне кажется, что должен быть более простой способ, а я его просто упускаю.
Даже если единственный способ - это закодировать каждую строку таким образом, как решить проблему, что он выбирает новые упражнения каждый раз, когда я перезагружаю страницу?