あるモデル (UserProfile モデル) のモデルから作成した別のアプリへの外部キーを持つ別のアプリがあります。私がしようとするsyncdb
と、そのアプリにフィクスチャがあるにもかかわらず、外部キー ID が NULL であることがわかります。YAML ファイルがロードされる順序を指定する方法はありますか?
アプリの構造は次のようになります -
プロフィール/
# models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
school = models.ForeignKey(School)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
# fixtures/initial_data.yaml
- fields:
username: admin
password: ***password hash here***
date_joined: 2012-02-01 01:00:00
email: email@email.com
last_name: Last
first_name: First
groups: []
is_active: true
is_staff: true
is_superuser: true
last_login: 2012-02-01 01:01:00
user_permissions: []
model: auth.user
pk: 1
- fields:
user: 1
school: 1
model: profile.UserProfile
pk: 1
学校/
# models.py
class School(models.Model):
name = models.CharField(max_length=100)
# fixtures/initial_data.yaml
- fields:
name: "School"
model: school.School
pk: 1
そしてsyncdb
私は得る:
IntegrityError: profile_userprofile.school_id may not be NULL
これは、学校の前に UserProfile モデルを保存していることを意味するに違いありません。だから、学校がNULLになることを許可せずに、yamlファイルを並べ替えたり、何らかの方法で学校をUserProfileに属性付けたりすることがまったく可能かどうか疑問に思っています。
settings.py では、インストールされているアプリを読み込んschool
でprofile
います。