Python 如何在创建不同模型的实例后立即创建一个模型的实例?

Python 如何在创建不同模型的实例后立即创建一个模型的实例?,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我有两个链接模型: class MyUser(AbstractBaseUser, PermissionsMixin): username = models.CharField(max_length=24, unique=True) class Profile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True,

我有两个链接模型:

class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=24, unique=True)

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
    on_delete=models.CASCADE, null=True, blank=True)  
my site的用户首先注册并创建帐户MyUser应该能够查看其尚未创建的/空白的配置文件,然后可以在“配置文件\详细信息”页面中编辑/保存其空白配置文件。 我的ProfileDetailView:

class ProfileDetailView(DetailView):
    template_name = 'profile/profile_detail.html'
    def get_object(self, *args, **kwargs):
        user_profile = self.kwargs.get('username')
        obj = get_object_or_404(Profile, user__username=user_profile)
        return obj  
他们无法在注册后访问自己的配置文件页面,因为他们的配置文件实例尚未创建。为了允许他们进入他们的配置文件并查看空白配置文件,然后从那里更新他们的PrimeLoDeDeFrm表单,我尝试信令:

def user_post_save_receiver(sender, instance, created, *args, **kwargs):
  if not instance.profile.exists():
     Profile.objects.create(user=instance)
以及

def user_post_save_receiver(sender, instance, created, *args, **kwargs):  
  Profile.objects.get_or_create(user=instance)  
两个返回中的第一个返回RelatedObjectDoesNotExist:MyUser没有配置文件。 第二种方法可行,但Django文档不建议在那里使用get_或create

达到预期效果的更好方法是什么? 此外,在这种情况下,当我

class ProfileUpdateView(UpdateView):
    form_class = ProfileUpdateForm
    template_name = 'profile/profile_edit.html'

    def get_object(self, *args, **kwargs):
        user_profile = self.kwargs.get('username')
        obj = get_object_or_404(Profile, user__username=user_profile)
        return obj

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.user = self.request.user
        return super(ProfileUpdateView, self).form_valid(form)

该信号有一个已创建的参数;您可以进行检查,因为您知道新创建的用户需要配置文件

def user_post_save_receiver(sender, instance, created, *args, **kwargs):
  if created:
     Profile.objects.create(user=instance)