Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Django. Передача параметров из шаблона c формой в представление и запись в БД

Нужно организовать передачу в функцию данных одного из полей формы(для записи в БД) и дополнительных элементов(присутствуют на странице шаблона) user.id, status.id . Сейчас в функцию передается только product.id, при добавлении дополнительных элементов в , при переходе на страницу с формой выдает:
Reverse for 'zakaz' with arguments '(1, 2)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['(?P[0-9]+)/zakaz/$']
как настроить передачу нужных параметров в представление и последующую запись их в БД в нужные столбцы?
models.py
class Zakaz(models.Model): user = models.ForeignKey(User) product = models.ForeignKey("product", Product) status = models.ForeignKey("status", Status) suggestions = models.TextField("пожелания", max_length=1000)
forms.py
class ZakazForm(forms.ModelForm): class Meta: model = Zakaz fields = ['suggestions']
views.py
def detail(request, pk): product = get_object_or_404(Product, pk=pk) form = ZakazForm context = {'product': product, 'form': form} return render(request, 'main/detail.html', context)
def zakaz(request, pk): if request.method == 'POST': form = ZakazForm(request.POST) if form.is_valid(): // Запись всего в БД return HttpResponseRedirect('/thanks/') else: product = get_object_or_404(Product, pk=pk) form = ZakazForm context = {'product': product, 'form': form} return render(request, 'main/detail.html', context)
urls.py
urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), url(r'^(?P[0-9]+)/$', views.detail, name='detail'), url(r'^(?P[0-9]+)/zakaz/$', views.zakaz, name="zakaz"), url(r'^thanks/$', views.thanks, name="thanks"), ]
detail.html

{% csrf_token %}
{{ field.label_tag }}
{{ form }}


Ответ

Попробуйте передавать в url именованный аргумент:
{% url 'main:zakaz' pk=product.id %}

Комментариев нет:

Отправить комментарий