Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向Django模型添加外键_Python_Django_Django Models_Django Views - Fatal编程技术网

Python 向Django模型添加外键

Python 向Django模型添加外键,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我想知道在将列从整型字段转换为外键时,什么是最好的过程。以下是我的两个模型: class workout(models.Model): userid = models.IntegerField() datesubmitted = models.DateField() workoutdate = models.DateField(); bodyweight = models.FloatField(null=True); totalreps = model

我想知道在将列从整型字段转换为外键时,什么是最好的过程。以下是我的两个模型:

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)
第二个:

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 = exercise.objects.filter(workoutid__in = workout_ids).order_by("workoutid__workoutdate")
我的错误是:

(1054, "Unknown column 'tracking_exercise.workoutid_id' in 'field list'")
我认为这是我的模型代码中的一个问题,但我不确定这是否是视图中的一个问题


谢谢你们的帮助

您收到错误,因为训练ID不是ID列表

解决当前问题的一个简单快捷的方法是使用
.values\u 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')

我是否必须更改这两个表并添加这些列?您不必更改基础SQL表。您可以这样更改:
userid=models.IntegerField()
user=models.ForeignKey(user,db\u column='userid')
。好的,除了这一点,一切都很好,它不喜欢(workout\u workoutdate)的顺序。它说没有一个全局名称“workout\uu workoutdate”没有定义