나는 Django 1.7 마이그레이션을 사용하며, 특히 새로 생성 된 데이터베이스에 초기 데이터를 채우고 싶습니다. 따라서 저는 이것을 위해 데이터 이전을 사용합니다. 그것은 다음과 같습니다Django 마이그레이션에서 신호를 보내려면 어떻게해야합니까?
@receiver(signals.post_save, sender=django.contrib.auth.models.User)
def add_user_details(sender, instance, created, **kwargs):
if created:
my_app.UserDetails.objects.create(user=instance)
그러나 :
동시에def populate_with_initial_data(apps, schema_editor):
User = apps.get_model("auth", "User")
new_user = User.objects.create(username="nobody")
class Migration(migrations.Migration):
...
operations = [
migrations.RunPython(populate_with_initial_data),
]
, 나는 모든 새 사용자에 대한 UserDetails
모델의 인스턴스를 갖고 싶어이 신호는 이동 외부에만 작동합니다 . 그 이유는 apps.get_model("auth", "User")
이 신호가 보내지지 않는 django.contrib.auth.models.User
과 다를만큼 충분하지 않기 때문입니다. 내가 수동으로 수행하려고 할 경우, 다음과 같이, 그것은 실패
UserDetails
이
역사
User
에 O2O으로 가리키는 만들려고하기 때문에
signals.post_save.send(django.contrib.auth.models.User, instance=julia, created=True)
이 실패
ValueError: Cannot assign "<User: User object>": "UserDetails.user" must be a "User" instance.
험머.
좋아, 신호 처리기를 직접 호출 할 수 있습니다. 그러나 키워드 인수 (및 필요한 다른 기록 클래스)에 역사적인 UserDetails
클래스를 전달해야했습니다. 게다가 UserDetails
이있는 앱은이 데이터 이전을 지원하는 앱이 아니므로 쉽게 손상 될 수있는 추한 종속성이 될 수 있습니다. UserDetails
앱이 INSTALLED_APPS
에서 제거 된 경우
이 코드는 현재 추한 코드와 FixMe 주석으로 해결해야하는 현재의 제한 사항입니까? 아니면 데이터 마이그레이션에서 신호를 보내는 방법이 있습니까?
해결 방법을 찾으셨습니까? –
예, signal.post_migrate를 사용합니다. *이 * 호출되기 때문입니다. 그러나 여전히 필요하지 않은 코드가 필요합니다. –
이 질문은 대답이없는 장고 질문의 맨 위에 있으므로 답변을 게시하고 본인의 대답을 받아 들여야합니다. – dotcomly