Как установить начальное значение поля формы из представления в Django - PullRequest
0 голосов
/ 22 июня 2019

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

В одной форме (CreateOrderForm) я ввожу значение для поля 'reference'.В моем следующем представлении я использую .get для извлечения этого ввода, а затем пытаюсь установить по умолчанию поле «ссылка» в CreateManifestForm таким же.Я не получаю ошибки, но никакое значение не приходит.

Вот что я пытаюсь сделать:

FORMS.PY

class CreateOrderForm(forms.ModelForm):
    class Meta:
        model = Orders
        fields = ('reference', 'ultimate_consignee', 'ship_to', 'vessel', 'booking_no', 'POL',
        'DOL', 'COO', 'POE', 'ETA', 'pickup_no', 'terms', 'sales_contact', 'trucking_co', 'loading_loc', 'inspector', 'total_cases', 'total_fob', 'freight_forwarder', 'commodity', 'is_airshipment', 'credit')



class CreateManifestForm(forms.ModelForm):
    class Meta:
        model = Manifests
        fields = ('reference', 'cases', 'description', 'count')

URLS.PY

url(r'^add_manifest/(?P<reference_id>\d+)/$', add_manifest, name='add_manifest')

VIEWS.PY

def add_order(request):
    if request.method == "POST":
        form = CreateOrderForm(request.POST)

        if form.is_valid():
            reference_id = form.cleaned_data.get('reference')
            form.save()
            return redirect('add_manifest', kwargs={'reference_id': reference_id})
    else:
    form = CreateOrderForm()
    objectlist = Customers.objects.all()
    context = {
        'form': form,
        'objectlist': objectlist,
    }

    return render(request, 'add_order.html', context)


def add_manifest(request, reference_id):

    if request.method == "POST":
        form = CreateManifestForm(request.POST)

        if form.is_valid():
            form.save()
            return redirect('add_manifest')

    reference_id = request.POST.get('reference')
    form = CreateManifestForm(initial={'cases': reference_id})

    manifests = Manifests.objects.all().filter(reference=reference_id)
    context = {
        'form': form,
        'manifests': manifests,
    }

    return render(request, 'add_manifest.html', context)

Я ожидаю, что поле ссылки в представлении add_manifest будет равно значению, введенному в 'reference' в CreateOrderForm, но я просто ничего не получаю.

TRACEBACK

Файл "/Library/Python/2.7/site-packages/django/core/handlers/exception.py" во внутренней 39. response = get_response (request)

Файл "/Library/Python/2.7/site-packages/django/core/handlers/base.py" в _get_response 187. response = self.process_exception_by_middleware (e, request)

File "/Библиотека / Python / 2.7 / site-packages / django / core / handlers / base.py "в _get_response 185. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)

Файл" / Users / andrews /Рабочий стол / WBU / web_unit / unit / views.py "в add_order 61. return redirect ('add_manifest', kwargs = {'reference_id': reference_id})

Файл "/Library/Python/2.7/site-packages/django/shortcuts.py" в редиректе 56. return redirect_class (resol_url (to, * args, ** kwargs))

File"/Library/Python/2.7/site-packages/django/shortcuts.py" в resol_url 147. вернуть в обратном порядке (to, args = args, kwargs = kwargs)

File "/Library/Python/2.7/site-packages / django / urls / base.py "в обратном порядке 91. return force_text (iri_to_uri (resolver._reverse_with_prefix (view, prefix, * args, ** kwargs)))

File" / Library / Python/2.7/site-packages/django/urls/resolvers.py "в _reverse_with_prefix 389. (lookup_view_s, args, kwargs, len (pattern), Patterns)

Тип исключения: NoReverseMatch at / add_order Значение исключения: Reverseдля 'add_manifest' с аргументами '()' и аргументами ключевых слов '{' kwargs ': {' reference_id ': u'45643'}} 'не найдено.Попробован 1 шаблон (ов): ['add_manifest / (? P \ d +) / $']

1 Ответ

0 голосов
/ 22 июня 2019

Вы никогда не передаете reference_id в add_manifest, поэтому там нельзя использовать его.

Вам нужно передать его в URL - ваш закомментированный код был правильным, вам просто нужно выполнить и добавитьэто к urlpattern и представлению:

path('add-manifest/<int:reference_id>/', views.add_manifest, name='add-manifest')

...

# in add-order
return redirect('add_manifest', reference_id=reference_id) 

...

def add_manifest(request, reference_id):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...