Python Django:没有这样的桌子

Python Django:没有这样的桌子,python,django,django-models,Python,Django,Django Models,我在django中使用了一个中间表(关键字到),并在/admin/workoutJournal/workout/add/no这样的表中得到了一个操作错误:workoutJournal\u workoutexercise 我的代码如下: class Exercise(models.Model): name = models.CharField(max_length=120, default='') def __repr__ (self): return 'sel

我在django中使用了一个中间表(关键字
),并在/admin/workoutJournal/workout/add/no这样的表中得到了一个
操作错误:workoutJournal\u workoutexercise

我的代码如下:

class Exercise(models.Model):

    name = models.CharField(max_length=120, default='')

    def __repr__ (self):
        return 'self.name'

    def __str__ (self):
        return self.name

    class planesOfMovement(models.TextChoices):
        SAGITTAL = 'SA', _('Sagittal')
        FRONTAL = 'FR', _('Frontal')
        TRANSVERSAL = 'TR', _('Transversal')

    planesOfMovement = models.CharField(
        max_length=2,
        choices=planesOfMovement.choices,
        default=planesOfMovement.FRONTAL,
    )

    class typeOfMovement(models.TextChoices):
        PUSH = 'PS', _('Push')
        PULL = 'PL', _('Pull')
        CARRY = 'CA', _('Carry')
        LOAD = 'LO', _('Load')

    typeOfMovement = models.CharField(
        max_length=2,
        choices=typeOfMovement.choices,
        default=typeOfMovement.LOAD,
    )

class Workout(models.Model):
    date = models.DateField(default=datetime.date.today)
    exercises = models.ManyToManyField(Exercise, through='WorkoutExercise')

    def __str__(self):              # __unicode__ on Python 2
        return self.name

    # class Meta:
    #     db_table = "workoutJournal_Workout_exercises" # necessary to update migrations when modifying the through
    #                                                 # argument of an existing relation

class WorkoutExercise(models.Model):
    exercise = models.ForeignKey(Exercise, on_delete=models.DO_NOTHING)
    workout =  models.ForeignKey(Workout, on_delete = models.PROTECT)
    sets = models.PositiveIntegerField()
    reps = models.PositiveIntegerField()
    tempo = models.CharField(max_length = 11, validators=[
                                      RegexValidator(r'[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}', 
                                      message='Please format your tempo as [0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}')
                                  ])

知道我做错了什么吗

步骤1:删除
迁移
文件夹中除
\uuuu init\uuuuu.py
之外的所有文件
步骤2:注释掉models.py中的所有字段,并添加一些随机场,如:

class Exercise(models.Model):
    randomfield = models.CharField(max_length=10)
    #name = models.CharField(max_length=120, default='')

    #def __repr__ (self):
     #   return 'self.name'

    #def __str__ (self):
     #   return self.name

步骤3:在终端或CMD中运行
python manage.py makemigrations
python manage.py migrate

步骤4:现在移除随机场并取消对字段的注释,如:

class Exercise(models.Model):
    name = models.CharField(max_length=120, default='')

    def __repr__ (self):
        return 'self.name'

    def __str__ (self):
        return self.name

步骤5:再次运行
python manage.py makemigrations
python manage.py migrate

我希望这对你有用。

注意:确保对所有型号都执行此操作

您的模型的简化版本,带有一些修复程序:

   class Exercise(models.Model):
        name     = models.CharField(max_length=120, default='')

   class Workout(models.Model):
        date       = models.DateField(default=timezone.now)
        exercises  = models.ManyToManyField(Exercise, through='WorkoutExercise', related_name='workout_exercises')

   class WorkoutExercise(models.Model):
        exercise = models.ForeignKey(Exercise, on_delete = models.DO_NOTHING)
        workout  =  models.ForeignKey(Workout, on_delete = models.PROTECT)

您是否检查了为这些模型生成的迁移?迁移文件中是否存在中间表?是的。是的,似乎是这样。但名称为name='WorkoutExercise',因此大小写不同。但是其他表也有这样的问题,它们不起作用。我也有同样的问题,但能够解决:删除所有迁移并删除数据库。然后运行makemigrations并再次迁移。这对我很有用,希望对你有所帮助。谢谢你的主意。我试过了,但仍然不起作用:没有这样的表:workoutJournal\u workoutexercise