问题是,我将(旧版)表与(UserProfile)django 模型与 M2MField 以及中间表相关联,但似乎没有生成任何关系。旧表只是一张没有其他关系的表。
我正在使用 Python 2.7、django 1.8 和 PostgreSQL 9.4 的 Anaconda 发行版。这是代码。
模型.py
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
class Legacy(models.Model): # Legacy DB with no pk column
... # columns
class Meta:
managed = False
db_table = 'legacydb_name'
class UserProfile(models.Model):
user = models.OneToOneField(User)
username = models.CharField(max_length = 16)
mylegacy = models.ManyToManyField(Legacy,
through = 'Legacylink',
related_name = 'legacy_mylegacy')
def __unicode__(self):
return "%s"%(self.user, )
class Legacylink(models.Model):
userprofile = models.ForeignKey(UserProfile)
yourlegacy = models.ForeignKey(Legacy)
class Meta:
db_table = 'legacy_link'
unique_together = ('userprofile','yourlegacy')
管理员.py
from django.contrib import admin
from myapp.models import UserProfile, Legacy, Legacylink
# Register your models here.
admin.site.register(UserProfile)
admin.site.register(Legacy)
admin.site.register(Legacylink)
无错误迁移后,生成的 UserProfile 表显示 UserProfile 和 Legacy DB 之间没有关系。我的意思是,UserProfile 表没有名为 my legacy 的列,也没有名为 Legacylink 的表。
我在谷歌上搜索了很多关于如何将 ManyToManyField 与遗留数据库一起使用的信息……我也非常感谢 SO 提供了许多帮助,例如 unique_together、ProgrammingError、中间表。我在那里遵循了许多指南,但我无法解决我的问题......
这就是我要问的:
- 旧版数据库必须有一个用于 primary_key 的 id 列吗?
- 如何检查M2M关系是否创建成功?
另外,如果您告诉我一些使用 M2MField 处理遗留数据库的指南,我将不胜感激。