У объекта «ContactView» нет атрибута «запрос» - PullRequest
0 голосов
/ 14 марта 2020

Спасибо за интересное, что, надеюсь, легко исправить. У меня есть веб-сайт со страницей «Свяжитесь с нами», где пользователь может ввести Имя и т. Д. c. и отправить сообщение. Наряду с этим представлением я собираю данные IP и использую MaxMind для хранения географических данных пользователя c. У меня есть представление, которое вызывает функцию, которая захватывает IP и пингует MaxMind для получения данных. Мой взгляд выглядит так:

class ContactView(CreateView):
    model = Contact
    template_name = "contact/contact.jinja"
    form_class = ContactForm
    success_url = "/"

    def __init__(self, *args, **kwargs):
        self.initial['ip_information'] = get_ip_data(self.request) #<< Call the IP function

    def form_valid(self, form):
        # Update Slack:
        first_name = form.data["first_name"]
        last_name = form.data["last_name"]
        email = form.data["email"]
        phone = form.data["phone"]
        ip_information = form.data["ip_information"] # << this is where the IP Data is stored

        [ ... ]

        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["service_list"] = Service.objects.all().order_by("rank")
        context["county_list"] = County.objects.all().order_by("county")

        return context

Вызываемая функция, для которой требуется объект запроса, выглядит следующим образом:

def get_ip_data(request):
    # Get IP information
    # MaxMind Database for geoIP
    client = geoip2.webservice.Client(#####, "XXXXXXXXXXXXXXXX")
    x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
    if x_forwarded_for:
        client_ip = x_forwarded_for.split(",")[0]
    else:
        client_ip = request.META.get("REMOTE_ADDR")

    ip_data = client.city(client_ip)

    return ip_data

К сожалению, ContactView (CreateView), похоже, не дает мне доступ к запросу, который вызвал его, чтобы я мог получить IP. Вместо этого я получаю объект 'ContactView', не имеющий атрибута 'request' error. Такое ощущение, что это прямо там, но я не знаю, как это сделать. Любая помощь будет оценена! Спасибо. :)

...