Как я могу вывести url в поле id заказа в моей форме django?

Я делаю простой сайт с формами на Django. Вот как выглядит url моего сайта: mysite.com/register/12345678. Я хочу вывести часть после регистра (12345678) в поле id заказа. Когда кто-то переходит по этому url mysite.com/register/87654321, я хочу вывести его. Как я могу это сделать? Вот мои коды (в настоящее время использую Django 1.11.10)

forms.py

from django import forms
from .models import Customer
from . import views

class CustomerForm(forms.ModelForm):

    class Meta:
        model = Customer
        fields = (
        'order_id','full_name','company','email',
        'phone_number','note')

        widgets = {
            'order_id': forms.TextInput(attrs={'class':'orderidcls'}),
            'full_name': forms.TextInput(attrs={'class':'fullnamecls'}),
            'company': forms.TextInput(attrs={'class':'companycls'}),
            'email': forms.TextInput(attrs={'class':'emailcls'}),
            'phone_number': forms.TextInput(attrs={'class':'pncls'}),
            'note': forms.Textarea(attrs={'class':'notecls'}),

        }

views.py

from django.shortcuts import render
from olvapp.models import Customer
from olvapp.forms import CustomerForm
from django.views.generic import CreateView,TemplateView


def guaform(request,pk):

    form = CustomerForm()

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

        if form.is_valid():
            form.save(commit=True)

        else:
            print('ERROR FORM INVALID')

    theurl = request.get_full_path()
    orderid = theurl[10:]

    return render(request,'forms.py',{'form':form,'orderid':orderid})

customer_form.html

{% extends 'base.html' %}

{% block content %}

<h1>REGİSTRATİON</h1>

<form class="registclass" method="POST">
  {% csrf_token %}
  {{ form.as_p }}

  <button type="submit" class="btn btn-default">REGISTER</button>

</form>

{% endblock %}

urls.py

from django.conf.urls import url
from django.contrib import admin
from olvapp import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^thanks/$',views.ThankView.as_view(),name='thank'),
    url(r'^register/(?P<pk>\d+)',views.guaform,name='custform'),

]

Вы передали значение в представление как 'pk', поэтому вы можете использовать его для установки начального значения:

views.py

form = CustomerForm(initial={'order_id': pk})

SamSparx прав, вот некоторая дополнительная информация, которая поможет заранее предотвратить такие ошибки:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^thanks/$',views.ThankView.as_view(),name='thank'),
    url(r'^register/(?P<pk>\d+)',views.guaform,name='custform'),
]

Вы используете regex для разбора пути. Согласно документации Regex не рекомендуется использовать в этом случае, поскольку он может внести больше ошибок и его труднее отлаживать. (Неоптимизированный) RegEx также имеет тенденцию быть медленнее.

Для простых случаев использования, таких как ваш путь здесь, выберите синтаксис пути по умолчанию, как показано ниже:

urlpatterns = [
    url('admin/', admin.site.urls),
    url('thanks/',views.ThankView.as_view(),name='thank'),
    url('register/<int:pk>',views.guaform,name='custform'),
]

Конечно, вы также можете использовать строку вместо int в зависимости от того, как вы используете pk.

Ваши пути не все последовательно заканчиваются косой чертой. Это может повлиять на SEO и запутать пользователей. См. this и this.

Также ваша форма по какой-то причине не импортирована .as_view(), что может вызвать некоторые проблемы.

Вернуться на верх