Передача начального значения в поле формы из предыдущего подробного представления - PullRequest
0 голосов
/ 22 ноября 2018

Я немного запутался, как это сделать, у меня есть кнопка «Связаться с пользователем» на странице сведений о пользователе.Я пытаюсь установить начальное значение формы для поля электронной почты в качестве электронного письма пользователей из предыдущего детального просмотра страницы, чтобы оно заполнялось предварительно.

Могу ли я передать user.email в виде kwarg в URL кнопки?

views.py

def Contact(request):
    form_class = ContactForm

    # new logic!
    if request.method == 'POST':

        form = form_class(data=request.POST)

        if form.is_valid():
            contact_name = request.POST.get(
                'contact_name'
            , '')
            contact_email = request.POST.get(
                'contact_email'
            , '')
            form_content = request.POST.get('content', '')

            # Email the profile with the
            # contact information
            template = get_template('contact_template.txt')
            context = {
                'contact_name': contact_name,
                'contact_email': contact_email,
                'form_content': form_content,
            }
            content = template.render(context)

            email = EmailMessage(
                "New contact form submission",
                content,
                "Your website" +'',
                ['youremail@gmail.com'],
                headers = {'Reply-To': contact_email }
            )
            email.send()
            return redirect('contact_form')


    return render(request, 'portal/contact_form.html', {
        'form': form_class,
    })

.py

from django import forms
class ContactForm(forms.Form):
    contact_name = forms.CharField(required=True)
    contact_email = forms.EmailField(required=True, initial='{ kwarg }')
    content = forms.CharField(
        required=True,
        widget=forms.Textarea
    )

user_detail.html

<div class="col-lg-4 text-center p-5" style="padding-right:20px; border-right: 1px solid #e5e5e5;">
              <a href="{% url 'portal:contact_form' kwarg.user.email %}">
                <h1><i class="fa fa-2x fa-envelope-o text-success" aria-hidden="true"></i></h1>
                <p class="text-muted mt-3 ">Contact Customer</p>
              </a>
            </div>

1 Ответ

0 голосов
/ 22 ноября 2018

Есть несколько способов сделать это.Как например:

Способ 1. Отправьте его в URL Querystring

из предыдущего просмотра сведений, отправьте электронное письмо в строке запроса url.Например:

 def DetailForm(request, *args, **kwargs):
      ... 
      if form.is_valid():
           # do some things
           user_email = form.cleaned_data.get('user_email')  # assuming its the form field you are using for catching user email

           redirect_url = "{}?user_email={}".format(self.get_success_url(), user_email)
           return HttpResponseRedirect(redirect_url)

И перехватить его в следующем представлении формы:

  def Contact(request):
     form_class = ContactForm(initial={'contact_email': request.GET.get('user_email')})
     ...

Метод 2: Сохранить в сеансе.

Это почти аналогично последнему подходу, ноон сохраняет данные в сеанс .

def DetailForm(request, *args, **kwargs):
      ... 
      if form.is_valid():
           # do some things
           request.session['user_email'] = form.cleaned_data.get('user_email')  # Storing data in session

           # every other code

и получает их в следующем виде формы:

  def Contact(request):
     form_class = ContactForm(initial={'contact_email': request.session.get('user_email')})
     ...

Обновление

Если вы приходитена странице сведений означает, что у вас есть доступ к объекту.Поэтому на странице сведений обновите кнопку contact следующим образом:

<a href="{% url 'portal:contact_form' object.email %}">contact</a>  // or user.email if you are passing user object as user in context

в представлении контактов:

def Contact(request, email):
    if request.method == "GET":
        form = ContactForm(initial={'contact_email': email)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...