как сделать профиль для каждого пользователя - PullRequest
0 голосов
/ 01 мая 2020

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

это мои 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()

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

class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

1 Ответ

0 голосов
/ 01 мая 2020

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...