을 저장 업데이트 : 내가 명시 적으로 user.profile.save()
전화를해야이 방법으로사용자시 사용자 프로필은 내가 지금처럼, 내 사용자 모델을 확장하기 위해 <a href="https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#extending-the-existing-user-model" rel="nofollow noreferrer">'User profile'</a> 접근 방식을 다음있어
# models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE, primary_key=True)
my_field = models.CharField(max_length=100)
# signals.py
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
나에게 이는 투박한 느낌
# views.py
def some_func(request):
user = User.objects.create_user('dummy', '[email protected]', '12345678')
user.profile.my_field = 'hello'
user.save() # This does not persist the profile object...
user.profile.save() # ...this does
이 문제를 해결하려면, 나는 다음에 create_user_profile()
을 변경했습니다 작품 :
profile
이 환상을주고 원하는대로,
User
객체의 일부입니다
# signals.py
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
profile = UserProfile.objects.get_or_create(user=instance)
profile.save()
많은 경우 나는이 접근 방식을 사용하지 않았습니다. 이 방법을 사용할 때주의해야 할 사항이 있습니까?
, 같은주의 사항 첫 번째 방법에 대한 것 또한 사실이다. 나 맞아? – bavaza
그러면 장면 활동 뒤에 의존하지 않고 명시 적으로 저장을 호출합니다. 그래서이 경고의 아무도는 정말로 중요하지 않다. – e4c5
그러나 나는 post_save가 나쁜 접근이라는 것을 말하지 않고있다, 정말로 좋다. 네가 물었 기 때문에 나의 대답은 !! – e4c5