【发布时间】:2021-06-22 10:02:58
【问题描述】:
我遇到了 django 模型的问题,它为同一类创建多个表,它为同一关系创建两个表,它应该创建 3 个表,即 users、groups 和 user_groups,但我有一个额外的名称为 users_groups 的表(注意:额外的 's')。
verbose_name、db_meta 或 related_name 似乎存在问题
完整代码:
from django.db import models
from django.conf import settings
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.utils.translation import ugettext_lazy as _
class UserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
pass
class CustomUser(AbstractUser):
"""Model representing a User with some extended fields and email as username field"""
username = None
email = models.EmailField(max_length=100, unique=True)
is_admin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
ordering = ['email']
db_table = 'users'
objects = UserManager()
def __str__(self):
"""String for representing the Model object."""
return self.email
class Group(models.Model):
"""Model representing a Group"""
name = models.CharField(max_length=200)
members = models.ManyToManyField(settings.AUTH_USER_MODEL, through='UserGroup', related_name='user_groups')
class Meta:
ordering = ['name']
db_table = 'groups'
def __str__(self):
return self.name
class UserGroup(models.Model):
"""Model representing a User's Group"""
group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name = 'group')
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name = 'user')
class Meta:
db_table = 'user_groups'
【问题讨论】:
-
您是否尝试过调试它以查看该表的来源或使用它的原因?也许查看迁移文件以查看正在创建的表等可能有助于调试。
-
我尝试删除所有的 migrations/ 文件夹和数据库表,然后生成。这也创建了重复表
-
是的,但是如果您阅读了迁移,请查看为
users_groups表创建的内容,您可能会弄清楚创建它的原因。您在这里没有详细说明,所以我们只能推测发生了什么。
标签: python django django-models