【问题标题】:Saving data from a form submission从表单提交中保存数据
【发布时间】:2015-07-28 19:24:51
【问题描述】:

我想创建一个直接链接到帐户信息页面并显示帐户信息的帐户注册页面。我很难获得表格以将帐户信息保存到我的模型中,我不知道为什么。

models.py:

class Owner(models.Model):
    fullname = models.CharField(max_length=255)
    username = models.CharField(max_length=255)
    password = models.CharField(max_length=255)
    email = models.EmailField()

    def __unicode__(self):
        return self.fullname

""" This is a Form class and not a regular Model class """
class OwnerForm(forms.Form):
    class Meta:
        model = Owner
        fields = ['fullname', 'username', 'password', 'email']

views.py:

def register(request):
    form = OwnerForm()
    if request.POST:
        form = OwnerForm(request.POST)
        if form.is_valid():
            fullname = request.POST.get('fullname', '')
            username = request.POST.get('username', '')
            password = request.POST.get('password', '')
            email = request.POST.get('email', '')
            owner_obj = Owner(fullame=fullname, username=username, password=password, email=email)
            owner_obj.save()
            return HttpResponseRedirect('courses/accountinfo.html')
    else:
        form = OwnerForm()
    return render_to_response('courses/register.html', {'form': form}, context_instance=RequestContext(request))

register.html:

{% extends "layout.html" %}
{% load static from staticfiles %}

{% block title %}{{ page.title }}{% endblock %}
{% block content %}
<article>
        <div id="Register">
            <form action="{% url 'courses:accountinfo' %}" method="post"> {% csrf_token %}
                <p>
                    <label for="fullname">Full name:</label>
                    <input id="fullname" name="fullname" type="text">
                </p>
                <p>
                    <label for="email">Email</label>
                    <input id="email" name="email" type="text">
                </p>
                <p>
                    <label for="username">Username</label>
                    <input id="username" name="username" type="text">
                </p>
                <p>
                    <label for="password">Password</label>
                    <input id="password" name="password" type="password">
                        <span>Enter a password longer than 8 characters</span>
                </p>
                <p>
                    <label for="confirm_password">Confirm Password</label>
                    <input id="confirm_password" name="confirm_password" type="password">
                        <span>Please confirm your password</span>
                </p>
                <p>
                    <input type="submit" value="REGISTER" id="submit">
                </p>
            </form>
            <script src="http://code.jquery.com/jquery-1.11.0.min.js" type="text/javascript" charset="utf-8"></script>
            <script src="{% static 'js/app.js' %}" charset="utf-8"></script>
      </div>
</article>
{% endblock %}

【问题讨论】:

    标签: python django django-models django-forms modelform


    【解决方案1】:

    您可以在检查 form.is_valid 后调用它,然后发送重定向并让您的其他视图处理其余部分。 accountinfo 视图也可能存在问题,但您没有发布该代码。

    owner = form.save()
    owner.set_password(owner.password)
    owner.save()
    

    【讨论】:

    • 我并没有在 accountinfo 视图上考虑太多,因为我认为 register 视图对于保存数据很重要。一旦我弄清楚如何将数据保存到我的模型中,我就会担心在 accountinfo 页面中显示它。
    • 那个小sn-p代码也不起作用,我认为它可能与html有关
    • 你需要让URL指向action=中的注册视图。
    • 好的,这解决了我创建新用户的问题,但现在,它尝试重定向到课程/注册/课程/帐户信息,而不仅仅是课程/帐户信息,所以我接下来需要弄清楚。谢谢!
    • 除了您的实际操作外,还可以添加此内容。 ?next=/nextUrl/
    【解决方案2】:

    使用表单上的 save 方法来保存数据,而不是在表单有效后创建模型对象。但是我看到模板包含其他字段。你有什么有效的方法吗? 你得到的错误是什么?您发布到正确的网址吗?

    【讨论】:

    • 我没有收到错误,只是没有保存。我也从下面的帖子中得到了答案,但现在它重定向到的 url 不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多