Как передать параметры из form в метод view? - Python

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! url.py
Листинг программы
  1. urlpatterns = patterns('',
  2. url(r'^index/', last_stickers),
  3. url(r'add_sticker', add_sticker)
  4. )
view.py-пока такой нерабочий вариант
Листинг программы
  1. from django.shortcuts import render
  2. from records.models import Sticker
  3. from django.utils import timezone
  4. from Sticker.forms import StickerForm
  5. from django.http.response import HttpResponseRedirect
  6. def last_stickers(request):
  7. stickers = Sticker.objects.order_by('-date')[:10]
  8. return render(request, 'latest_stickers.html', {'stickers': stickers})
  9. def add_sticker(request):
  10. if request.method == 'GET':
  11. form = StickerForm()
  12. else:
  13. form = StickerForm(request.POST)
  14. if form.is_valid():
  15. text = form.cleaned_data['text']
  16. priority = form.cleaned_data['priority']
  17. date = timezone.now()
  18. post = Sticker.objects.create(text=text,
  19. priority=priority,
  20. date=date)
  21. return HttpResponseRedirect(reverse('post_detail',
  22. kwargs={'post_id': post.id}))
  23. return render(request, 'post/post_form_upload.html', {
  24. 'form': form,})
forms.py
Листинг программы
  1. from django import forms
  2. class StickerForm(forms.Form):
  3. text = forms.CharField(max_length=50)
  4. priority = forms.IntegerField()from django.db import models
  5. class Sticker(models.Model):
  6. text = models.CharField(max_length=50)
  7. priority = models.IntegerField()
  8. date = models.DateField()
lates_stickers.html
Листинг программы
  1. <html>
  2. <head>
  3. <title>Stickers</title>
  4. <style>
  5. table {
  6. border-collapse: collapse;
  7. table-layout: fixed;
  8. width: 310px;
  9. }
  10. table td {
  11. border: solid 1px #fab;
  12. width: 100px;
  13. word-wrap: break-word;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <h1>Stickers</h1>
  19. <table>
  20. <tr>
  21. <td>Text</td>
  22. <td>Priority</td>
  23. <td>Date</td>
  24. </tr>
  25. {% for sticker in stickers %}
  26. <tr>
  27. <td>{{ sticker.text}}</td>
  28. <td>{{ sticker.priority}}</td>
  29. <td>{{ sticker.date}}</td>
  30. </tr>
  31. {% endfor %}
  32. </table>
  33. <form method="get" action="add_sticker">
  34. <input type="text" name="text">
  35. <select name="priority">
  36. <option value="1">very hight</option>
  37. <option value="2">hight</option>
  38. <option value="3">midle</option>
  39. <option value="4">low</option>
  40. <option value="5">very low</option>
  41. </select>
  42. <input type="submit" value="add">
  43. </form>
  44. </body>
  45. </html>
Как мне получить данные из рекуеста и добавить их в БД, а потом сделать редирект, что бы пользователь увидел обновление. Правильно ли хоть делаю? Заранее спс!

Решение задачи: «Как передать параметры из form в метод view?»

textual
Листинг программы
  1. def create_post(request):
  2.     if not request.user.is_anonymous():
  3.         if request.method == 'POST':      #меняете на гет в вашем случае
  4.             # обработать данные если метод POST
  5.             form = {
  6.                 'text' : request.POST['text'],    #так же только request.GET т.к. <input type="text" name="text">  имя поля text и в request.GET оно лежит
  7.                 'title' : request.POST['title']     # тут вместо title из GET берите name="priority" 'priority' : request.POST['priority']
  8.             }
  9.             # в словаре form будет храниться введенная информация
  10.             if form['text'] and form['title']:
  11.                 # если поля заполнены без ошибок
  12.                 Article.objects.create(          # создаете запись в бд
  13.                     text=form['text'],
  14.                     title=form['title'],
  15.                     author=request.user)
  16.                 #достаю только что созданную статью с целью получения ее id и редиректа на страницу с ней
  17.                 article = Article.objects.filter(title=form['title'])
  18.                
  19.                 return redirect('get_article', article_id=article.id)
  20.             else:
  21.                 # Если данные не корректны
  22.                 form['errors'] = u'Не все поля заполнены'
  23.                 return render(request, 'create_post.html', {'form': form})
  24.         else:
  25.             return render(request, 'create_post.html', {})
  26.     else:
  27.         raise Http404

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы