У меня есть приложение, которое, если пользователь зарегистрируется, приложение автоматически создаст для него страницу профиля, часть регистрации и входа в систему работает правильно, но не создает страницу профиля, я должен сделать это на странице администратора. Как мне решить эту проблему?

Это мой models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

    def save(self):
        super().save()

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

Это мой views.py

def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data.get('username')
        messages.success(request, f'Your Acount Has Been Created You Are Now Be Able to Login')
        return redirect('login')
else:
    form = UserRegisterForm()
return render(request, 'users/register.html', {'form':form})


@login_required
def profile(request):
if request.method == 'POST':
    u_form = UserUpdateForm(request.POST, instance=request.user)
    p_form = ProfileUpdateForm(request.POST ,request.FILES , instance=request.user.profile)
    if u_form.is_valid() and p_form.is_valid():
        u_form.save()
        p_form.save()
        messages.success(request, f'Your Acount Has Been Updated')
        return redirect('profile')
else:
    u_form = UserUpdateForm(instance=request.user)
    p_form = ProfileUpdateForm(instance=request.user.profile)

context = {
    'u_form':u_form,
    'p_form':p_form
}
return render(request, 'users/profile.html', context)

Это мой forms.py

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2'] 


class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email'] 


class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['image']

Это мои сигналы.py

@receiver(post_save, sender=User)
def create_profile(sender, instance, created , **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()

И это мои приложения.py:

class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals
0
Sam 1 Май 2020 в 18:15

1 ответ

Единственная причина, по которой я вижу, что это может вызвать это, заключается в том, что сигналы не регистрируются должным образом, убедитесь, что конфигурация указана в файле init.py приложения:

# my_app.__init__.py
default_app_config = 'my_app.apps.MyAppConfig'

В качестве альтернативы переместите сигналы в файл models.py и посмотрите, срабатывают ли они при создании пользователя. В крайнем случае попробуйте создать профиль в представлении при сохранении формы пользователя.

0
0sVoid 1 Май 2020 в 20:08