1

问题是,我将(旧版)表与(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_togetherProgrammingError中间表。我在那里遵循了许多指南,但我无法解决我的问题......

这就是我要问的:

  1. 旧版数据库必须有一个用于 primary_key 的 id 列吗?
  2. 如何检查M2M关系是否创建成功?

另外,如果您告诉我一些使用 M2MField 处理遗留数据库的指南,我将不胜感激。

4

0 回答 0