Отображение встроенных наборов форм Django для разных экземпляров родительской модели - PullRequest
0 голосов
/ 04 октября 2019

Я новичок в Django и пытаюсь отобразить встроенный набор форм в моем приложении Django, чтобы позволить пользователю добавлять экземпляры дочерней модели в соответствующий экземпляр родительской модели. Я чувствую, что есть простой ответ, но до сих пор я не смог придумать или найти решение.

Мои модели:

class ExerciseName(models.Model):

    name_of_exercise = models.CharField(max_length=100, default = 'Exercise name', unique=True)

    def __str__(self):
        return self.name_of_exercise

class SetLogger(models.Model):

    weight = models.FloatField(default=0)
    reps = models.FloatField(default=0)
    date = models.DateField(auto_now=True)
    exercise_group = models.ForeignKey(ExerciseName, on_delete = models.CASCADE) 

Мои формы:

class ExerciseNameForm(forms.ModelForm):

    class Meta: 
        model = ExerciseName
        fields = ('name_of_exercise', )

Просмотров:

def name_list(request):

    exercise_name = ExerciseName.objects.all()
    sets = SetLogger.objects.all()

    exercisename = ExerciseName.objects.get(pk=1)
    SetLoggerFormSet = inlineformset_factory(ExerciseName, SetLogger, fields=('weight','reps',))

    if request.method == 'POST':  
      form = ExerciseNameForm(request.POST)
      formset = SetLoggerFormSet(request.POST, instance=exercisename)
      if form.is_valid():
         form.save(commit=True)
      else:
         form = ExerciseNameForm()
      if formset.is_valid():
         formset.save(commit=True)
      else:
         formset = SetLoggerFormSet()

    return render(request, 'gymloggerapp/name_list.html', {'exercise_name': exercise_name, 'form': ExerciseNameForm(), 'sets': sets, 'formset': formset})

До сих пор это работало, позволяя мне добавлять вес и количество повторений к первому экземпляру моей модели ExerciseName (с pk = 1), просто отображая набор формв моем шаблоне. Однако я хотел бы создать таким образом набор форм для каждого экземпляра модели ExerciseName, а затем отобразить все эти элементы на одной странице в одном и том же шаблоне. Я не уверен, как это сделать, поскольку get () только позволяет мне получить 1 экземпляр модели ExerciseName?

...