読者です 読者をやめる 読者になる 読者になる

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>