newforms 勉強中(2)
モデルからフォームを作ってみた。
テンプレートで単純に"{{ form }}"を入力すると、"UnicodeDecodeError"がでた。
ManyToManyフィールドを含む(ModelMultipleChoiceField)があると駄目みたい。
メモ:
URLFieldは、"verify_exists=False"を指定しないと、
URLがロードできるかチェックをする。
models.py
# -*- coding: utf-8 -*- from django.db import models # Create your models here. class Tag(models.Model): name = models.CharField(maxlength=100) class Admin: pass def __str__(self): return self.name class Contact(models.Model): """ Contact """ title = models.CharField(maxlength=50) message = models.TextField() url = models.URLField(verify_exists=True, null=True) email = models.EmailField() date = models.DateField() tags = models.ManyToManyField(Tag) class Admin: pass def __str__(self): return self.title
views.py
# Create your views here. from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django import newforms as forms from django.newforms import form_for_model from newforms.f.models import Contact def contact(request): ContactForm = form_for_model(Contact) if request.POST: f = ContactForm(request.POST) if f.is_valid(): # 特に何もせず return render_to_response('contact.html', {'form': f}) else: f = ContactForm() return render_to_response('contact.html', {'form': f})
newforms/f/templates/contact.html
<form action="/newforms/" method="post"> <dl> {% for field in form %} <dt>{{ field.label }}</dt> <dd>{{ field }}</dd> {% if field.help_text %}<dd>{{ field.help_text }}</dd>{% endif %} {% if field.errors %}<dd class="myerrors">{{ field.errors }}</dd>{% endif %} {% endfor %} </dl> <input type="submit" /> </form>