Python Django:没有这样的桌子
我在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
到
),并在/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