Tworzę formularz w Django. Kiedy opublikuję dane, dane są naturalnie wysłane. Mój problem polega na tym, że chcę przejść dodatkową nieruchomość do danych wysyłkowych, to nie jest żaden z pól formularza, ale dodatkowy.

Więc mogę później zrobić coś takiego (pseudokod):

def form_view(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            extra_field = form.cleaned_data['extra_field']
            #or maybe
            extra_field = form.extra_field
            #...
    else:
        form = MyForm()
        #...

Wszystko, co może działać, aby przejść dodatkową nieruchomość, która nie jest pole, ale prosta zmienna, do żądania pocztowego.

4
user1034697 3 grudzień 2011, 06:09

3 odpowiedzi

Najlepsza odpowiedź

Jeśli chcesz przejść do Django jako żądanie poczta z HTML, użyjesz ukrytego wejścia

<input type="hidden" name="foo" value="bar" />

print request.POST['foo'] # out: bar

Jeśli chcesz zmodyfikować słownik postu w Pythonie z twojego widoku, copy(), aby go zmutowała.

mutable_post = request.POST.copy()
mutable_post['foo'] = 'bar'

form = MyForm(mutable_post)
4
Yuji 'Tomita' Tomita 3 grudzień 2011, 02:25

Jest kilka sposobów na to. Jeden, czy możesz po prostu dodać go do szablonu.

<form action="." method="post">{% csrf_token %}
   {{ form.as_p }}
   <input type="hidden" name="extra_field" value="{{ extra }}" />
   <input type="submit" value="submit" />
</form>

Innym sposobem jest dodanie pola do klasy formularza, ale użyj Ukryty widget. Nie jestem pewien, czy tego chcesz. Jeśli tak, po prostu dodaj komentarz i mogę dalej wyjaśnić ten punkt.

1
Brian Neal 3 grudzień 2011, 02:26

W metodzie {x0}} można dodać nowe informacje do czyszczenia_data, coś w rodzaju: form.cleaned_data['extra'] = 'monkey butter!', a następnie jeśli form.is_valid() masz dodatkowe informacje.

Co robisz w końcu, zależy od tego, jakie są twoje dodatkowe informacje, a gdzie jest dostępny dla Ciebie.

1
Roshan Mathews 3 grudzień 2011, 02:49