問題は、(レガシー)テーブルを(UserProfile)djangoモデルにM2MFieldおよび中間テーブルを介して関連付けたが、関係が生成されていないように見えることです。レガシー テーブルは、他のリレーションを持たない 1 つのテーブルです。
Python バージョン 2.7、django 1.8、および PostgreSQL 9.4 で Anaconda ディストリビューションを使用しています。ここにコードがあります。
models.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')
admin.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 を使用する方法について多くのことをグーグルで調べました...また、 unique_together、ProgrammingError、中間テーブルなどの多くの助けを提供してくれた SO に本当に感謝しています。そこで多くのガイドに従いましたが、問題を解決できませんでした...
ここに私が尋ねるものがあります:
- レガシー DB には primary_key の id 列が必要ですか?
- M2M リレーションが正常に作成されたかどうかを確認するにはどうすればよいですか?
また、レガシー DB を M2MField で処理するためのガイドラインを教えていただければ幸いです。