Django:你能用自动生成的直通表创建一个关系吗?

时间:2018-02-02 21:14:30

标签: mysql django

我的代码看起来像这样:

from django.db import models
from django.conf import settings

User = settings.AUTH_USER_MODEL

class Dish(models.Model):
  name    = models.CharField(max_length=200)

class Meal(models.Model):
  name    = models.CharField(max_length=200)
  dishes  = models.ManyToManyField(Dish)

多对多菜肴字段将产生一个名为“myapp_meal_dishes”的数据库表。正在创建包含id,meal_id和dish_id字段。

我想添加一个与自动生成的表连接的MealDishEater模型:

class MealDishEater(models.Model):
  meal_dish = models.ForeignKey(MealDishes, on_delete=models.CASCADE)
  eater     = models.ForeignKey(User, on_delete=models.PROTECT)
  ate_meal  = models.BooleanField(default=False)

当然,这不起作用,因为没有定义MealDishes。有没有办法做到这一点,还是我必须创建自己的表?

1 个答案:

答案 0 :(得分:2)

您可以使用ManyToManyField属性访问through中间模型。所以这应该有效:

class MealDishEater(models.Model):
    meal_dish = models.ForeignKey(Meal.dishes.through, on_delete=models.CASCADE)

但就个人而言,我总是为through创建明确的ManyToManyFields模型,而不是允许这样的魔法。