私は2つのリンクされたモデルがあります:私のサイトレジスタの異なるモデルのインスタンスが作成されるとすぐに1つのモデルのインスタンスを作成するにはどうすればよいですか?
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)
ユーザーを最初(MyUserとする)アカウントを作成し、その未作成/ブランクのプロファイル(プロファイル)を表示した後、持っていることができるはずです空白のプロファイルをprofile_detailページから編集/保存するオプション。
マイ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
彼らが作成されなかったため、自分のプロファイルインスタンスに登録した後、自分のプロフィールページにアクセスすることはできません。
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)
2つのリターンの最初の:彼らは自分のプロフィールに移動し、空白のプロフィールを閲覧できるようにするために、そこから自分のProfileUpdateFormを更新し、私は、シグナリングをしようとしてきましたRelatedObjectDoesNotExist: MyUser has no profile.
Djangoのドキュメントでは、get_or_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)
を持っている場合
はまた、この場合でも、必要class ProfileCreateView(CreateView):
のですか?