Как передать параметры из form в метод view? - Python
Формулировка задачи:
Здравствуйте!
url.py
view.py-пока такой нерабочий вариант
forms.py
lates_stickers.html
Как мне получить данные из рекуеста и добавить их в БД, а потом сделать редирект, что бы пользователь увидел обновление.
Правильно ли хоть делаю?
Заранее спс!
Листинг программы
- urlpatterns = patterns('',
- url(r'^index/', last_stickers),
- url(r'add_sticker', add_sticker)
- )
Листинг программы
- from django.shortcuts import render
- from records.models import Sticker
- from django.utils import timezone
- from Sticker.forms import StickerForm
- from django.http.response import HttpResponseRedirect
- def last_stickers(request):
- stickers = Sticker.objects.order_by('-date')[:10]
- return render(request, 'latest_stickers.html', {'stickers': stickers})
- def add_sticker(request):
- if request.method == 'GET':
- form = StickerForm()
- else:
- form = StickerForm(request.POST)
- if form.is_valid():
- text = form.cleaned_data['text']
- priority = form.cleaned_data['priority']
- date = timezone.now()
- post = Sticker.objects.create(text=text,
- priority=priority,
- date=date)
- return HttpResponseRedirect(reverse('post_detail',
- kwargs={'post_id': post.id}))
- return render(request, 'post/post_form_upload.html', {
- 'form': form,})
Листинг программы
- from django import forms
- class StickerForm(forms.Form):
- text = forms.CharField(max_length=50)
- priority = forms.IntegerField()from django.db import models
- class Sticker(models.Model):
- text = models.CharField(max_length=50)
- priority = models.IntegerField()
- date = models.DateField()
Листинг программы
- <html>
- <head>
- <title>Stickers</title>
- <style>
- table {
- border-collapse: collapse;
- table-layout: fixed;
- width: 310px;
- }
- table td {
- border: solid 1px #fab;
- width: 100px;
- word-wrap: break-word;
- }
- </style>
- </head>
- <body>
- <h1>Stickers</h1>
- <table>
- <tr>
- <td>Text</td>
- <td>Priority</td>
- <td>Date</td>
- </tr>
- {% for sticker in stickers %}
- <tr>
- <td>{{ sticker.text}}</td>
- <td>{{ sticker.priority}}</td>
- <td>{{ sticker.date}}</td>
- </tr>
- {% endfor %}
- </table>
- <form method="get" action="add_sticker">
- <input type="text" name="text">
- <select name="priority">
- <option value="1">very hight</option>
- <option value="2">hight</option>
- <option value="3">midle</option>
- <option value="4">low</option>
- <option value="5">very low</option>
- </select>
- <input type="submit" value="add">
- </form>
- </body>
- </html>
Решение задачи: «Как передать параметры из form в метод view?»
textual
Листинг программы
- def create_post(request):
- if not request.user.is_anonymous():
- if request.method == 'POST': #меняете на гет в вашем случае
- # обработать данные если метод POST
- form = {
- 'text' : request.POST['text'], #так же только request.GET т.к. <input type="text" name="text"> имя поля text и в request.GET оно лежит
- 'title' : request.POST['title'] # тут вместо title из GET берите name="priority" 'priority' : request.POST['priority']
- }
- # в словаре form будет храниться введенная информация
- if form['text'] and form['title']:
- # если поля заполнены без ошибок
- Article.objects.create( # создаете запись в бд
- text=form['text'],
- title=form['title'],
- author=request.user)
- #достаю только что созданную статью с целью получения ее id и редиректа на страницу с ней
- article = Article.objects.filter(title=form['title'])
- return redirect('get_article', article_id=article.id)
- else:
- # Если данные не корректны
- form['errors'] = u'Не все поля заполнены'
- return render(request, 'create_post.html', {'form': form})
- else:
- return render(request, 'create_post.html', {})
- else:
- raise Http404
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д