2012-02-28 26 views
0

我有一个模型(UserProfile模型)中的模型与一个外键分开的应用程序到我创建的另一个应用程序。当我尝试syncdb时,我得到的是外键ID是NULL,即使我在该应用程序中有一个夹具。有没有办法指定YAML文件的加载顺序?Django - YAML App Fixtures订单冲突

这里的应用程序结构是什么样子 -

资料/

# 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 protected] 
     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模型。所以,我想知道是否可以重新排列yaml文件或以某种方式将学校归入UserProfile而不允许学校为NULL。

在settings.py中,我正在加载school,之后是profile已安装的应用程序。

回答

2

这里正确的做法是使用natural keys

如果你不能使用它,你可以手动加载灯具,只需重新命名并加载manage.py loaddata即可。

+0

我欣赏指出的资源。设置natural_key.dependencies看起来像是用于序列化的解决方案,但它不会在syncdb期间设置依赖关系。谢谢你的信息。 – garromark 2012-02-28 13:08:32