我的代码看起来像这样:
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_dish"的数据库表,其中包括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没有定义。有没有办法做到这一点,或者我必须创建自己的直通表?
您可以访问具有through
属性的ManyToManyField
中间模型。所以这应该有效:
class MealDishEater(models.Model):
meal_dish = models.ForeignKey(Meal.dishes.through, on_delete=models.CASCADE)
不过,就我个人而言,我总是为ManyToManyFields
创建明确的through
模型,而不是允许这样的魔术。