I’m trying to develop a Django application with relation to exercises per workout.
I currently have two tables, one that stores exercise (multiple exercises per workout) information, and one that stores the workout information with a workout that is a foreign key between the two.
However, I’m having trouble grasping the concept of submitting multiple exercises inside of one form without it getting fairly ugly very fast.
Keep in mind I am a Django noob so feel free to point out any redundant or useless code you see
Models.py
class workout(models.Model):
user = models.ForeignKey(User , db_column='userid')
datesubmitted = models.DateField()
workoutdate = models.DateField();
bodyweight = models.FloatField(null=True);
totalreps = models.IntegerField()
totalweight = models.FloatField()
numsets = models.IntegerField();
numexercises = models.IntegerField()
workoutname = models.CharField(max_length=250)
def getallexercises (self,id):
all_workout_exercises = exercise.objects.filter(workoutid = id)
return all_workout_exercises
def get_absolute_url(self):
return "/home"
class workoutForm(ModelForm):
class Meta:
model = workout
exclude = ('user','bodyweight','totalreps','totalweight','datesubmitted')
class exercise(models.Model):
workout = models.ForeignKey(workout,db_column='workoutid')
userid = models.IntegerField();
exercisename = models.CharField(max_length = 100)
repetitions = models.IntegerField()
weight = models.FloatField()
def get_absolute_url(self):
return "/home"
class exerciseForm(ModelForm):
class Meta:
model = exercise
views.py
class workoutCreate(CreateView):
form_class = workoutForm
model = workout
def form_valid(self,form):
createxercise(self.request,self.model.pk)
form.instance.user = self.request.user;
form.instance.bodyweight = self.request.POST['weight']
form.instance.datesubmitted = datetime.datetime.now()
form.instance.totalweight = summation(list(self.request.POST['weightinputboxes']))
form.instance.totalreps = summation(list(self.request.POST['repinputboxes']))
return super(workoutCreate, self).form_valid(form)
Where should I attempt to submit the exercises? I’ve read about inlineformset_factory but I’m not sure if I can make this work for creating multiple exercise rows in my table…
Thanks for the help guys, I appreciate it!
Modelformset is what you need. Look at the documentation, which has good examples explaining it.