Как использовать django-города для автоматического заполнения пользовательского поля местоположения с городами, основанными на домене интернет-провайдера? [Дубликат]

Похожие вопросы как: pandas: Как разделить текст в столбце на несколько строк?

Вы могли бы сделать:

>> a=pd.DataFrame({"var1":"a,b,c d,e,f".split(),"var2":[1,2]})
>> s = a.var1.str.split(",").apply(pd.Series, 1).stack()
>> s.index = s.index.droplevel(-1)
>> del a['var1']
>> a.join(s)
   var2 var1
0     1    a
0     1    b
0     1    c
1     2    d
1     2    e
1     2    f

17
задан Bastian 13 January 2012 в 09:45
поделиться

2 ответа

Нет, запрос не передается в ModelForm. Вы должны сделать что-то вроде этого в своем представлении:

form = BookSubmitForm()
form.fields['book'].queryset = Book.objects.filter(owner=request.user)
# pass form to template, etc

Как вы сказали, часто бывает проще инкапсулировать это в объект Form, особенно если у вас есть несколько полей, которые потребуют отфильтрованных запросов. Чтобы сделать это, переопределите формы __init__() и пусть он принимает kwarg request:

class BookSubmitForm(ModelForm):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request")
        super(BookSubmitForm, self).__init__(*args, **kwargs)
        self.fields["book"].queryset = Book.objects.filter(owner=self.request.user)
        self.fields["whatever"].queryset = WhateverModel.objects.filter(user=self.request.user)

Затем просто передавайте запрос всякий раз, когда вы создаете экземпляр BookSubmitForm в своем представлении:

def book_submit(request):
    if request.method == "POST":
        form = BookSubmitForm(request.POST, request=request)
        # do whatever
    else:
        form = BookSubmitForm(request=request)
    # render form, etc
29
ответ дан AdamKG 3 September 2018 в 16:27
поделиться

Расширение ответа AdamKG на представления класса - переопределить метод get_form_kwargs:

class PassRequestToFormViewMixin:
    def get_form_kwargs(self):
        kwargs = super(PassRequestToFormViewMixin, self).get_form_kwargs()
        kwargs['request'] = self.request
        return kwargs

from django.views.generic.edit import CreateView
class BookSubmitCreateView(PassRequestToFormViewMixin, CreateView):
    form_class = BookSubmitForm
# same for EditView

, а затем в формах:

from django.forms import ModelForm
class BookSubmitForm(ModelForm):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request")
        super(BookSubmitForm, self).__init__(*args, **kwargs)
        ...
2
ответ дан trybik 3 September 2018 в 16:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: