Django - Конфликт заказов в приложениях YAML - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть отдельные приложения с внешним ключом от модели в одной модели (модель UserProfile) к другому приложению, которое я создал.Когда я пытаюсь syncdb, я получаю, что идентификатор внешнего ключа равен NULL, хотя у меня есть приспособление для него в этом приложении.Есть ли способ указать порядок загрузки файлов YAML?

Вот как выглядит структура приложения -

profile /

# 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

school /

# 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, не позволяя школе быть НЕДЕЙСТВИТЕЛЬНОЙ.

В settings.py я загружаю school, а затемпо profile в установленных приложениях.

1 Ответ

2 голосов
/ 28 февраля 2012

Правильный подход здесь заключается в использовании естественных ключей .

Если вы не можете использовать его, вы можете загрузить приборы вручную, просто переименуйте их и загрузите на manage.py loaddata в порядкетебе нужно.

...