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

标签 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。有没有办法做到这一点,还是我必须通过表格创建自己的表格?

最佳答案

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

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

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

关于mysql - Django:你能创建一个与自动生成的直通表的关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590952/

相关文章:

mysql - 这个数据库规范化是否正确

mysql - 在 Nitrous.io 错误上安装 MySQL

python - Django Rest Framework 对象不可迭代?

mysql - 替换 SQL 数据库中的短代码

java - 重新引入 "Unknown initial character set index"错误?

python - 迭代列表并从模型中收集相应的字段值

django - 在 Django 中重置密码后对用户进行身份验证

django - 带有多个可选参数的 url

django - Redmine 作为另一个站点的身份验证后端

javascript - Node.js 为相关查询提供空数组