2

列を IntegerField から外部キーに変換する際に、彼らがどのような手順を実行するのが最善なのか疑問に思っていました。ここに私の2つのモデルがあります:

class workout(models.Model):

    userid = models.IntegerField()
    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)

そして2番目のもの:

class exercise(models.Model):  
    userid = models.IntegerField();
    workoutid = models.IntegerField(); 
    exercisename = models.CharField(max_length = 100)
    repetitions = models.IntegerField()
    weight = models.FloatField()

そして最後に私のdjangoビューコード:

user =User.objects.get(username = request.session['username']) #user 
        dates = request.GET.getlist('datepickerfilter') # two dates
        workout_ids = workout.objects.filter(userid=user.id).filter( workoutdate__gte = dates[0]).filter(workoutdate__lte = dates[1])
        all_exercises = exercise.objects.filter(workoutid__in = workout_ids)

エクササイズ モデルの 'workoutid' 列を、ワークアウト モデルの id フィールドに関連する外部キーに変更したいと考えています。モデルフィールドを次のように変更してみました:

workoutid = models.ForeignKey(workout);

そして、この order_by ステートメントを私のビューの all_exercises の最後に追加します。

all_exercises = exercise.objects.filter(workoutid__in = workout_ids).order_by("workoutid__workoutdate")

次のようなエラーが表示されます。

(1054, "Unknown column 'tracking_exercise.workoutid_id' in 'field list'")

私のモデルコードの問題だと思いますが、ビューの問題である可能性があるかどうかはわかりません。

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

4

1 に答える 1

2

workout_idsはIDのリストではないため、エラーが発生します。

現在の問題をすばやく簡単に修正するには、次の.values_list('id', flat=True)ように使用します。

workout_ids = workout.objects.filter(userid=user.id).\
    filter(workoutdate__gte=dates[0]).\
    filter(workoutdate__lte=dates[1]).\
    values_list('id', flat=True)

ただし、を使用することを強くお勧めしmodels.ForeignKeyます。始めるための簡単な例を次に示します。

class Workout:
    user = models.ForeignKey(User)
    # other fields go here...

class Exercise:
    workout = models.ForeignKey(Workout)
    # other fields go here...

次に、クエリを記述できます。

workout_list = Workout.objects.filter(user=request.user)
exercise_list = Exercise.objects.filter(workout__in=workout_list).order_by('workout__workoutdate')
于 2012-07-25T01:25:43.350 に答える