Передать переменную из вида в форму Django - PullRequest
0 голосов
/ 28 декабря 2018

В основном я отправляю письмо пользователю с password and username.Я могу получить имя пользователя, используя self.cleaned_data.get('email').Но проблема в том, что я не знаю, как получить пароль от просмотра, который я устанавливаю случайный пароль в представлениях.Поэтому, пожалуйста, помогите мне получить этот случайный пароль из views.py в forms.py в def send_email

Forms.py

class UserRegisterForm(forms.ModelForm):
        email = forms.EmailField()
        first_name = forms.CharField()
        last_name = forms.CharField()

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

        def send_email(self):
            name = self.cleaned_data.get('first_name')
            username = self.cleaned_data.get('email')
            to_email = self.cleaned_data.get('email')
            password1 = # Get Password from view

Views.py

def register(request):
    if request.method == 'POST':
        ur_form = UserRegisterForm(request.POST)
        pr_form = UserProfileForm(request.POST, request.FILES)
        user_role = 0
        if ur_form.is_valid() and pr_form.is_valid():
            new_user = ur_form.save(commit=False)            
            new_user.username = new_user.email
            password = User.objects.make_random_password() # Pass This to Form send_email
            new_user.set_password(password)
            new_user.save()

1 Ответ

0 голосов
/ 28 декабря 2018

Передайте случайный пароль в форму во время инициализации формы и обработайте его в форме UserRegisterForm, переопределив метод __init__()

Попробуйте это

# form.py
class UserRegisterForm(forms.ModelForm):
    <b>def __init__(self, *args, **kwargs):
        self._pwd = kwargs.pop('pwd', None)
        super().__init__(*args, **kwargs)</b>

    email = forms.EmailField()
    first_name = forms.CharField()
    last_name = forms.CharField()

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

    def send_email(self):
        name = self.cleaned_data.get('first_name')
        username = self.cleaned_data.get('email')
        to_email = self.cleaned_data.get('email')
        <b>password1 = self._pwd # access your password from view</b>


# views.py
def register(request):
    if request.method == 'POST':
        <b>random_password = generate_your_random_password() # generate password here </b>
        ur_form = UserRegisterForm(request.POST, <b>pwd=random_password</b>)
        pr_form = UserProfileForm(request.POST, request.FILES)
        user_role = 0
        if ur_form.is_valid() and pr_form.is_valid():
            new_user = ur_form.save(commit=False)
            new_user.username = new_user.email
            <b>new_user.set_password(random_password) # set the random password here </b>
            new_user.save()
            # your code ....
...