Как я могу вывести 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(), что может вызвать некоторые проблемы.