Django: Добавить форму в мое расширение Модель пользователя - PullRequest
0 голосов
/ 04 августа 2020

Итак, у меня есть эти модели, я добавляю в модель пользователя аватар:

class ProfileImage(models.Model):
    user = models.OneToOneField(
        verbose_name=_('User'),
        to=settings.AUTH_USER_MODEL,
        related_name='profile',
        on_delete=models.CASCADE
    )
    avatar = models.ImageField(upload_to='profile_image')

У меня также есть формы для модели пользователя:

class UserRegisterForm(forms.ModelForm):
    username = forms.CharField(label='', widget=forms.TextInput(attrs={'placeholder': 'Username'}))
    email = forms.EmailField(label='', widget=forms.TextInput(attrs={'placeholder': 'Email Address'}))
    email2 = forms.EmailField(label='', widget=forms.TextInput(attrs={'placeholder': 'Confirm Email'}))
    password = forms.CharField(label='', widget=forms.PasswordInput(attrs={'placeholder': 'Password'}))

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

    def clean(self, *args, **kwargs):
        email = self.cleaned_data.get('email')
        email2 = self.cleaned_data.get('email2')
        if email != email2:
            raise forms.ValidationError('El email debe coincidir')
        emails_qs = User.objects.filter(email=email)
        if emails_qs.exists():
            raise forms.ValidationError(
                'El email ya esta en uso'
            )
        return super(UserRegisterForm, self).clean(*args, **kwargs)

Я думаю, что если я в поля моих форм я это вижу. Итак, как мне добавить аватар в свои поля?

1 Ответ

0 голосов
/ 04 августа 2020

Я думаю, что лучший способ добиться этого - создать сигнал post_save для создания экземпляра ProfileImage для нового пользователя.

https://docs.djangoproject.com/en/3.0/ref/signals/

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

См. этот пост для аналогичного подхода: Создание расширенного профиля пользователя

...