单个类中可能存在多个多对多关系吗?这里是我的想法:Django多对多关系不起作用
策略可以被翻译成多种文字
一个语言可以列出许多政策
一个国家可以列出许多政策(甚至是多国语言)
策略可以在许多讨论国家
我正在使用django,python3和mysql,我正在圈子里。多对多的关系似乎成了问题。
多对多通过表不工作: 语言= models.ManyToManyField(语言,通过= “Policy_Detail”)
步骤圆形错误消息:
别名P3 = “python3”
P3 manage.py迁移
错误消息:django.db.utils.OperationalError:(1050, “表 'policytracker_country' 已存在”)
下降policytracker_country和所有其他policytracker表
键入P3 manage.py使迁移
没有变化来检测
键入P3 manage.py迁移
(1051, “未知表 'PolicyDB.policytracker_flag'”)
mysql> show tables;
+ ------------------------------ +
| Tables_in_PolicyDB |
+ ------------------------------ +
| policytracker_country |
| policytracker_events |
| policytracker_policy_user |
| policytracker_website |
| policytracker_website_filter |
+ ------------------------------ +
添加policytracker_flag和使用MySQL policytracker_label_links(即使我不在我的代码中没有提及它们中的任何一个)
丢弃了所有其他策略追踪表
+ --------------------------- - +
| Tables_in_PolicyDB |
+ ---------------------------- +
| policytracker_flag |
| policytracker_label_links |
+ ---------------------------- +
P3 manage.py makemigrations
没有变更检测
p3管理。PY迁移
django.db.utils.ProgrammingError:(1146, “表 'PolicyDB.policytracker_policy_detail' 不存在”)
+ ----------------- ------------- +
| Tables_in_PolicyDB |
+ ------------------------------ +
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| policytracker_country |
| policytracker_events |
| policytracker_policy_user |
| policytracker_website |
| policytracker_website_filter |
+ ------------------------------ +
在'policytracker'之前移动'policytracker.policy_detail'模型类。政策”类
NameError:名字 '政策' 没有定义
迁回来
P3 manage.py makemigrations
没有变化来检测
P3 manage.py迁移
“表 'policytracker_country' 已存在“
...我们走完了一圈 - 看到第一条错误信息
我在做什么错了?这里的模型:
class Website_Filter(models.Model): ...
class Language(models.Model):
iso_language = models.CharField(max_length = 2, primary_key=True)
flag_image_filename = models.CharField(max_length = 10, default='en.png')
nav_section_policy_list_title = models.CharField(max_length = 30, default='Policies')
...
class Country(models.Model):
language_country_code = models.CharField(max_length = 5, primary_key=True, default="en/ca")
country_name = models.CharField(max_length = 50)
class Policy(models.Model):
image_filename = models.CharField(max_length = 30)
start_date = models.DateField(default = None)
languages = models.ManyToManyField(Language, through="Policy_Detail")
countries = models.ManyToManyField(Country)
class Policy_Detail(models.Model):
policy = models.ForeignKey(Policy)
language = models.ForeignKey(Language)
needs_translation = models.BooleanField(default = True)
name = models.CharField(max_length = 50)
description1 = models.TextField()
description2 = models.TextField()
description3 = models.TextField()
twitter_handle = models.CharField(max_length = 30, default='')
subreddit = models.CharField(max_length = 30, default='')
class Website(models.Model):
name = models.CharField(max_length = 20, unique=True)
ip_address = models.GenericIPAddressField()
link = models.CharField(max_length = 50)
is_pending = models.BooleanField()
is_allowed = models.BooleanField()
class Official_Site(Website):
policy = models.ForeignKey(Policy_Detail)
class Interviews(Website):
policy = models.ForeignKey(Policy_Detail)
class Frequently_Asked_Questions(Website):
policy = models.ForeignKey(Policy_Detail)
class Articles(Website):
policy = models.ForeignKey(Policy_Detail)
class Books(Website):
policy = models.ForeignKey(Policy_Detail)
class Petitions(Website):
policy = models.ForeignKey(Policy_Detail)
class Actions(Website):
policy = models.ForeignKey(Policy_Detail)
class Rallies(Website):
policy = models.ForeignKey(Policy_Detail)
class Events(models.Model):
policy = models.ForeignKey(Policy_Detail)
event_date = models.DateField(null=True)
...
class Policy_User(models.Model):
country = models.ForeignKey(Country)
username = models.CharField(max_length = 30, default="Anonymous")
class Vote(models.Model):
policy = models.ForeignKey(Policy)
p_user = models.ForeignKey(Policy_User)
voting_date = models.DateField(auto_now_add = True)
week_number = models.IntegerField(default = 1)
vote_code = models.IntegerField(default = 1)
感谢您帮助。
是,多个多对多的关系可能在一个类中。你能更具体地说明你遇到了什么样的麻烦吗?什么是你正在得到的确切的错误信息,以及'实施'具体是指什么?你想做什么? – ChidG
@ChidG查看已编辑的问题 –
@ChidG在我的Policy类中,我将models = Many.ManyField(Language,through =“Policy_Detail”)更改为models.ManyToManyField(Language,through =“PolicyLanguage”),运行p3 makemigrations,p3 migrate出现错误: django.db.utils.ProgrammingError:(1146,“Table'PolicyDB.policytracker_policy_detail'does not exist”) –