5

Users汎用外部キーを使用して、さまざまなプロファイルをから継承されたモデルに関連付けますauth.User。オプションを渡しdumpdataてもできません。--naturalそれは言います、

エラー: シリアル化されたアプリ リスト内の myproject.AdminProfile、myproject.TeacherProfile、myproject.Users の依存関係を解決できません。

documentationによると、一般的な関係を含むフィクスチャを取り、フラッシュするには、natural_key メソッドを実装する必要があると言われています。ここに提示されたモデルでどのようにそれを行うことができますか?

class Users(User):
    location = models.TextField('Location', blank=True)
    created_by = models.ForeignKey('self', null=True, blank=True, related_name='created_by_user')

    # Generic foreign key setup to hold the extra attributes
    profile_contenttype = models.ForeignKey(ContentType, null=True, blank=True)
    profile_object_id = models.PositiveIntegerField('Extra ID', null=True, blank=True)
    profile_object = generic.GenericForeignKey('profile_contenttype', 'profile_object_id')


class AdminProfile(models.Model):
    organization = models.CharField('Organization', max_length=100)

    # profile reverse relation to get the user
    users_link = generic.GenericRelation('Users', content_type_field='profile_contenttype',
                                         object_id_field='profile_object_id')

class TeacherProfile(models.Model):
    designation = models.CharField('Designation', max_length=100)

    # profile reverse to get the user
    users_link = generic.GenericRelation('Users', content_type_field='profile_contenttype',
                                         object_id_field='profile_object_id')

Django 1.4.3 と Postrgres を使用。

4

2 に答える 2

8

あなたの問題は、自然キー メソッドの欠如とは無関係のようです。SQLite を使用して Django 1.4 および 1.2.5 で [元の] コードをそのままテストしたところ、エラーなしで自然キーを使用してデータをダンプできました。

いくつかの検索の後、モデル間に循環依存関係がある場合にこの問題が発生することがわかりました (自己参照を持つモデルを含む)。更新されたコードが示すように、Usersモデルには自己参照があるため、そこに問題があります。このバグは Django 1.3 で導入されました。すでに修正されていますが、安定版 (1.4.3 までテスト済み) ではまだ利用できません。ただし、ベータ版 (1.5b2) では、コードは正常に動作します。

ベータ版を使用する (または 1.2 にダウングレードする) ことができない場合、唯一の解決策は実際に別のモデルを作成することかもしれません。何かのようなもの:

class CreatedBy(models.Model):
    creator = models.ForeignKey(Users, related_name="created_by_user")
    created = models.ForeignKey(Users, unique=True, related_name="created_by")
于 2012-12-27T04:09:17.553 に答える