【问题标题】:Unable to save data in django model无法在 django 模型中保存数据
【发布时间】:2021-12-17 14:35:58
【问题描述】:

下面提到的是代码完整的详细信息,我已经尝试了所有方法以及应用了互联网上可用的方法,但问题仍然存在。提交表单时我没有收到任何错误。

型号:

class Subscriber(models.Model):
    id = models.BigAutoField(primary_key=True)
    email = models.EmailField(null=False, default=1)
    date = models.DateTimeField(auto_now_add=True)

查看:

from .models import Subscriber

def subscriber_view(request):
    if request.method == 'POST':
        email = request.POST.get('email')
        subscriber = Subscriber(email=email)
        subscriber.save()
    return render(request, 'homepage')

urls.py

path('', views.subscriber_view, name='subscriber'),

base.html

{% load static %}

<div class="footer-newsletter">
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-lg-6">
                <h4>Join Our Newsletter</h4>
                <p>Tamen quem nulla quae legam multos aute sint culpa legam noster magna</p>
                <form method="POST" action="{% url 'subscriber' %}" id="subscriber" role="form" novalidate="novalidate" >
                    {% csrf_token %}

                    <input class="form-control" id="email" placeholder="Email Address" type="email" name="email">
                    <input type="submit" value="Subscribe">
                </form>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    我得到了解决问题的方法,实际上代码一切正常。我有两个视图路由到相同的 URL,似乎是由于第一个视图运行之间的冲突,而不是第二个视图。

    【讨论】:

      【解决方案2】:

      来自 Django 文档https://docs.djangoproject.com/en/dev/ref/models/querysets/#create

      创建(**kwargs)

      一种创建对象并将其全部保存的便捷方法。因此:

      p = Person.objects.create(first_name="Bruce", last_name="Springsteen")
      

      和:

      p = Person(first_name="Bruce", last_name="Springsteen")
      p.save(force_insert=True)
      

      是等价的。

      force_insert 参数记录在其他地方,但这意味着 是总是会创建一个新对象。通常你不需要 担心这个。但是,如果您的模型包含手动主 您设置的键值以及该值是否已存在于 数据库,对 create() 的调用将失败并出现 IntegrityError,因为 主键必须是唯一的。准备好处理异常,如果 您正在使用手动主键。

      由于您的Subscriber 模型手动将主键设置为:

      class Subscriber(models.Model):
          id = models.BigAutoField(primary_key=True)
      

      您必须使用create()save(force_insert=True) 来添加新订阅者

      【讨论】:

      • Linh Nguyen 谢谢您的回答,我已经尝试过您发布的解决方案,也尝试检查共享的链接,但不幸的是,它对我不起作用。 ```defsubscriber_view(request): if request.method == 'POST': email = request.POST.get('email') #subscriber = Subscriber(email=email)subscriber = Subscriber.objects.create(email= 'email') #subscriber.save(force_insert=True) return render(request, 'homepage') ````
      • @NaushadAhmad 你检查你的数据库看它是否保存了吗?或确保 create() 方法运行
      猜你喜欢
      • 2011-02-27
      • 1970-01-01
      • 2022-01-24
      • 2017-10-11
      • 2021-12-09
      • 2018-11-23
      • 2016-06-13
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多