Отзывы пользователей через Django Email - PullRequest
0 голосов
/ 27 июня 2019

У меня есть приложение, в котором основной пользователь добавляет субпользователя и отправляет ему электронное письмо.Я хочу, чтобы у суб-пользователя была кнопка в шаблоне электронной почты, которая привела бы его / ее к форме обратной связи.В URL этой формы обратной связи должно быть указано имя пользователя, поскольку оно дает индивидуальный подход.Но я не понимаю, как мне передать данные субпользователя и сохранить данные обратной связи с данными.Я создам сценарий, чтобы вы, ребята, лучше понимали.

1. Существует основной пользователь Крис , Крис добавляет подчиненного пользователя Леон в его списке адресов электронной почты.(PS оба являются резидентами. Злые персонажи). 2. Крис отправляет Леону электронное письмо , Леон получает электронное письмо и, если он хочет, может оставить отзыв, нажав кнопку обратной связи в письме. 3. Если Леон нажмет кнопку, он будет перенаправлен на страницу, где URL может быть примерно таким (www.feedback/Leon.com) , там будет форма, где Леондобавит свой отзыв и отправит.

Проблема заключается в том, как сохранить обратную связь Леона в модели FeedBack через форму электронной почты с его информацией из модели субпользователя (PersonData).

models.py

class FeedBack(models.Model):
    feedback = models.TextField('Feedback')
    user_feedback = models.ForeignKey(PersonData)


class PersonData(models.Model):

    user_relation = models.ForeignKey(User)
    person_first_name = models.CharField("First Name", max_length=25)
    person_last_name = models.CharField("last Name", max_length=25)
    person_email = models.EmailField("Email", max_length=512)


views.py

# class FeedBackCreateView(CreateView):
#     model = FeedBack
#     template_name = "userfiles/FeedBack.html"

#     def form_valid(self, form):
#         obj = form.save(commit=False)
#         obj.user_feedback_id = self.request.persondata_id
#         obj.save()
#         return redirect("Home-Page")



def feedback(request, username):
    person_data = PersonData.objects.get(person_first_name=username)
    item = FeedBack.objects.all().filter(user_feedback=person_first_name)
    form = FeedBackForm

    if request.method == 'POST':
        if form.is_valid():
            form.save(commit=False)

            profile.employee_name = user
            profile.save()
            return redirect('Home-Page')

    context = {'all_item': all_item}
    return render(request, 'userfiles/AlbumPicsList.html', context)


------------------------------------------------------------------
#This View is from another app called salami. This sends the email
------------------------------------------------------------------

def send_email(request, s_id, pr_id):


    salami_data = SalamiCalculator.objects.get(id=s_id)
    person_data = PersonData.objects.get(id=pr_id)

    context = {'salami_data': salami_data,
               'person_data': person_data}

    subject = "Thank You"
    email_from = settings.EMAIL_HOST_USER  # email from
    to_email = [person_data.person_email]  # email to
    msg = EmailMultiAlternatives()
    msg.from_email = email_from
    msg.to = to_email
    msg.subject = subject
    msg.body = salami_data.thankyou_msg

    html_body = render_to_string("salamifiles\email-thanks.html")
    html_template = get_template("salamifiles\email-thanks.html")
    html_content = html_template.render(context)
    msg.attach_alternative(html_content, "text/html")
    msg.send()
    messages.success(request, ("Email Sent !!"))

    return render(request, 'salamifiles\email-thanks.html', context)


url.py


    url(r'^(?i)Feedback/(?P<user_feedback>\w+)/$',
        AlbumPicturesDetail.as_view(), name='Album-Pictures-View'),

==============================================
Salami URL
==============================================

   url(r'^Congratsmail/(?P<s_id>[0-9]+)/(?P<pr_id>\d+)/$',
        views.send_email, name='Congrats-EMAIL'),

forms.py



class FeedBackForm(forms.ModelForm):

    class Meta:
        model = FeedBack
        fields = ("feedback")

email.html

Have Not Yet modified the email template by adding the button

Шаблон отправки электронной почты


{% for i in items %}

<a href={% url 'Congrats-EMAIL' s_id=i.id pr_id=i.realted_person.id %}>Send Mail</a>

{% endfor %}

========================================================================

Я ожидаю, что когда Крис отправит Леону электронное письмо, Леон, нажав на кнопку, будет перенаправлен на страницу, где URL имеет его имя, и форма уже знает, что он Леон, чтобы сохранить данные против его идентификатора /имя.

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Я не понимаю, почему вы не можете сделать

class FeedBack(models.Model):
    feedback = models.TextField('Feedback')
    user_feedback = models.ForeignKey(PersonData, related_name="received_feedbacks")
    giver_feedback = models.ForeignKet(PersonData, related_name="given_feedbacks")
0 голосов
/ 27 июня 2019

Я согласен с @HenryM. Вы можете добавить дополнительное поле для связи с PersonData.

class FeedBack(models.Model):
    feedback = models.TextField('Feedback')
    user = models.ForeignKey(PersonData, related_name="received_feedbacks")
    giver = models.ForeignKet(PersonData, related_name="given_feedbacks")

Затем вы можете использовать его следующим образом:

from django.contrib.auth.decorators import login_required

<b>@login_required</b>
def feedback(request, username):
    person_data = PersonData.objects.get(person_first_name=username)
    item = FeedBack.objects.all().filter(user_feedback=person_first_name)
    form = FeedBackForm<b>(request.POST or None)</b>
    if request.method == 'POST':
        if form.is_valid():
            <b>feedback = form.save(commit=False)
            feedback.user = person_data
            feedback.giver = PersonData.objects.get(user_relation=request.user)
            feedback.save()</b>
            profile.employee_name = user
            profile.save()
            return redirect('Home-Page')

    context = {'form': form}
    return render(request, 'form_which_renders_feedbackform.html', context)

Я бы порекомендовалиспользование отношения OneToOne вместо ForeignKey для поля user_relation в PersonData.Так что вы можете просто получить к нему доступ через request.user.persondata.

...