テストではDjangoのフィクスチャを使用しています。UserProfileフィクスチャを作成する必要があります。最初の問題は、ユーザーエントリを指していることです。これに対処するために、私は自然キーを使用しています。つまり、UserProfileフィクスチャのユーザーフィールドはUserフィクスチャの実際のユーザー名です。
[
{
"pk": 8002,
"model": "auth.user",
"fields": {
"date_joined": "2012-08-28 10:00:00.000000+00:00",
"email": "",
"first_name": "",
"groups": [],
"is_active": true,
"is_staff": false,
"is_superuser": false,
"last_login": "2012-08-28 10:00:00.000000+00:00",
"last_name": "",
"password": "pbkdf2_sha256$10000$ltmEKsdCPjuK$74ZwNUh8rqFAPZ6+Cmi3tc8A94ueeXTplFqOQKlY4hc=",
"user_permissions": [],
"username": "user8002"
}
},
{
"pk": null,
"model": "spam_and_eggs.userprofile",
"fields": {
"user": ["user8002"],
"language": "",
"email_activated": true
}
}
]
残念ながら、エラーが返されます。
IntegrityError: Could not load share4you.UserProfile(pk=None): column user_id is not unique
ここに2番目の問題があります。Djangoのシグナルを使用してユーザーを作成するとUserProfileが自動的に作成され、そのユーザーのUserProfileが既に作成されているためにフィクスチャが失敗するため、失敗する可能性があると思います。それが理由でしょうか?それを修正する方法はありますか?
アドバイスありがとうございます!
編集#1:
モデルと信号:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
language = models.CharField(max_length=255, null=True, blank=True)
email_activated = models.BooleanField()
@receiver(post_save, sender=User)
def create_profile(instance, created, **kwargs):
if created:
UserProfile.objects.get_or_create(user=instance)
ユーザーモデルはdjango.contrib.auth.models.User
です。