将HTML表单值添加到Django中的模型

时间:2014-04-26 10:30:12

标签: django forms models

Django中的新功能,我在向表单添加表单数据时遇到了问题。我无法读取表单值并添加到模型中。我想将用户添加到具有名称和一个主题的模型中。

#models.py
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=80)
    subject = models.CharField(max_length=120)

#views.py
from django.shortcuts import render,render_to_response
from models import User
from django.http import HttpResponseRedirect

def add_user(request):
    if request.method == 'POST':
        f = User(request.POST)
        if f.is_valid():
            name = f.cleaned_data['name']
            subject = f.cleaned_data['subject']
            f.save()
            return HttpResponseRedirect('index.html')
        else:
            f = User()
        return render_to_response('index.html')

    return render(request, 'index.html')

#index.html
<!DOCTYPE html>
<html>
<head>
    <title>Sistemas Web</title>
</head>
<body>
    <div>
        <h1>Add User</h1>
        <form action="add_user" method="POST">{% csrf_token %}
            <label>Name</label><br>
            <input id="name" type="text"><br>
            <input type="radio" id="subject">A<br>
            <input type="radio" id="subject">B<br>
            <input type="submit" value="Enviar">
        </form>
    </div>
</body>
</html>

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

你根本没有任何表格。请阅读model forms上的文档并按照说明进行操作。

答案 1 :(得分:1)

您必须使用request.POST.get()获取网址发送的属性,然后发送到
f = User(request.POST)模型的属性,如u = User(name=name, subject=subject)

#views.py
def add_user(request):
    if request.method == 'POST':
        name = request.POST.get('name', '')
        subject = request.POST.get('subject', '')
        u = User(name=name, subject=subject)
        u.save()
        return render(request, 'index.html')

    return render(request, 'index.html')

在模板上,您缺少输入标记的名称,没有任何内容发送。

#index.html
<!DOCTYPE html>
<html>
<head>
    <title>Sistemas Web</title>
</head>
<body>
    <div>
        <h1>Add User</h1>
        <form action="add_user" method="POST">{% csrf_token %}
            <label>Name</label><br>
            <input name="name" type="text"><br>
            <input type="radio" name="subject" value="A">A<br>
            <input type="radio" name="subject" value="B">B<br>
            <input type="submit" value="Enviar">
        </form>

    </div>
</body>
</html>

希望有所帮助