0

ワークアウトごとのエクササイズに関連する Django アプリケーションを開発しようとしています。

現在、2 つのテーブルがあります。1 つはエクササイズ (ワークアウトごとに複数のエクササイズ) 情報を格納するテーブルで、もう 1 つはワークアウト情報を格納するテーブルで、 2 つの間の外部キーであるワークアウトを使用しています。

しかし、1 つのフォーム内に複数の演習を送信するという概念を理解するのに苦労しています。

私は Django 初心者なので、冗長なコードや役に立たないコードがあれば遠慮なく指摘してください。

モデル.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 

ビュー.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)

練習問題はどこに提出すればよいですか? inlineformset_factoryについて読んだことがありますが、テーブルに複数の演習行を作成するためにこれを機能させることができるかどうかはわかりません...

助けてくれてありがとう、ありがとう!

4

2 に答える 2

2

Modelformsetが必要です。それを説明する良い例があるドキュメントを見てください。

于 2012-10-11T04:04:16.977 に答える
0

あなたは特定の質問をしませんでしたが、ここにあなたのコードをクリーンアップするためのいくつかのことがあります:

  1. 慣例により、Pythonのクラス名はCapWords(各単語の最初の大文字)を使用します。PEP8は、Pythonのスタイルガイドを提供します。
  2. メソッドは必要ありません。djangoは関係ルックアップgetallexercisesを行うためのメソッドを提供します。あなたの場合、ワークアウトインスタンスだった場合は、次のことができますww.exercise_set.all()
  3. また、でURLをハードコーディングすることは避け、URLパターンに名前を付けるとともにget_absolute_url使用することを検討してください。reverse

最後に、あなたは。で正しい軌道に乗っていinlineformset_factoryます。

于 2012-10-11T04:19:10.797 に答える