“contact_contact”关系中的”名字”列的空值违反了非空约束。

huangapple go评论107阅读模式
英文:

null value in column "name" of relation "contact_contact" violates not-null constraint

问题

  1. # DETAIL: Failing row contains (9, null, miarisoa00@yahoo.de, , null).
  2. IntegrityError at /contact/contact/
  3. null value in column "name" of relation "contact_contact" violates not-null constraint
  4. DETAIL: Failing row contains (9, null, miarisoa00@yahoo.de, , null).
  5. Request Method: POST
  6. Request URL: http://127.0.0.1:8000/contact/contact/
  7. Django Version: 3.2.15
  8. Exception Type: IntegrityError
  9. Exception Value:
  10. null value in column "name" of relation "contact_contact" violates not-null constraint
  11. DETAIL: Failing row contains (9, null, miarisoa00@yahoo.de, , null).
  12. Exception Location: D:\MKSD_SITE\MKSD_WEB\site\lib\site-packages\django\db\backends\utils.py, line 84, in _execute
  13. Python Executable: D:\MKSD_SITE\MKSD_WEB\site\Scripts\python.exe
  14. Python Version: 3.9.13
  15. Python Path:
  16. ['D:\\MKSD_SITE\\MKSD_WEB\\site\\src',
  17. 'C:\\Program Files\\Python39\\python39.zip',
  18. 'C:\\Program Files\\Python39\\DLLs',
  19. 'C:\\Program Files\\Python39\\lib',
  20. 'C:\\Program Files\\Python39',
  21. 'D:\\MKSD_SITE\\MKSD_WEB\\site',
  22. 'D:\\MKSD_SITE\\MKSD_WEB\\site\\lib\\site-packages']
  23. Server time: Sun, 04 Jun 2023 16:39:42 +0000
  24. **views.py**
  25. def Kontact(request):
  26. if request.method == 'POST':
  27. contact = Contact()
  28. message_name = request.POST.get('message-name')
  29. from_email = request.POST.get('from-email')
  30. ville = request.POST.get('ville')
  31. message = request.POST.get('message')
  32. contact.name = message_name
  33. contact.email = from_email
  34. ville = ville
  35. contact.subject = message
  36. contact.save()
  37. message = f"""
  38. Name: {message_name}
  39. From: {from_email}
  40. Stadt: {ville}
  41. New message: \n\n{message}
  42. """
  43. # Send email
  44. send_mail(
  45. message_name, #subject
  46. message, #message
  47. from_email, #from email
  48. ['kontakt.mksd@gmail.com'], #to email
  49. fail_silently=False,
  50. )
  51. return render(request, 'contact.html', {'message_name': message_name})
  52. else:
  53. return render(request, 'contact.html', {})
  54. **models.py**
  55. class Contact(models.Model):
  56. name = models.CharField(max_length=50)
  57. email = models.EmailField(max_length=50)
  58. ville = models.CharField(max_length=100)
  59. subject = models.TextField(max_length=355)
  60. def __str__(self):
  61. return self.name
  62. **Template - HTML**
  63. <div class="row">
  64. <form method="post" class="was-validated">
  65. {% csrf_token %}
  66. <div class="col-lg-6">Email (erforderlich):
  67. <input type="email" name="from-email" class="form-control mb-30" placeholder="Your Email" required>
  68. </div>
  69. <div class="col-lg-6">Phone
  70. <input type="phone" name="phone" class="form-control mb-30" placeholder="yours">
  71. </div>
  72. <div class="col-lg-6">Name (erforderlich):
  73. <input type="name" name="name" class="form-control mb-30" placeholder="Name" required>
  74. </div>
  75. <div class="col-lg-6">Stadt
  76. <input type="stadt" name="stadt" class="form-control mb-30" placeholder=" City">
  77. </div>
  78. <br><br><br>
  79. <div class="col-12">
  80. <textarea name="text" class="form-control mb-30" placeholder="text">
  81. </textarea>
  82. </div>
  83. <div class="col-12 my-3">
  84. <button type="submit" class="btn btn-success">
  85. Send
  86. </button>
  87. </div>
  88. </form>
  89. </div>
英文:

DETAIL: Failing row contains (9, null, miarisoa00@yahoo.de, , null).

  1. IntegrityError at /contact/contact/
  2. null value in column &quot;name&quot; of relation &quot;contact_contact&quot; violates not-null constraint
  3. DETAIL: Failing row contains (9, null, miarisoa00@yahoo.de, , null).
  4. Request Method: POST
  5. Request URL: http://127.0.0.1:8000/contact/contact/
  6. Django Version: 3.2.15
  7. Exception Type: IntegrityError
  8. Exception Value:
  9. null value in column &quot;name&quot; of relation &quot;contact_contact&quot; violates not-null constraint
  10. DETAIL: Failing row contains (9, null, miarisoa00@yahoo.de, , null).
  11. Exception Location: D:\MKSD_SITE\MKSD_WEB\site\lib\site-packages\django\db\backends\utils.py, line 84, in _execute
  12. Python Executable: D:\MKSD_SITE\MKSD_WEB\site\Scripts\python.exe
  13. Python Version: 3.9.13
  14. Python Path:
  15. [&#39;D:\\MKSD_SITE\\MKSD_WEB\\site\\src&#39;,
  16. &#39;C:\\Program Files\\Python39\\python39.zip&#39;,
  17. &#39;C:\\Program Files\\Python39\\DLLs&#39;,
  18. &#39;C:\\Program Files\\Python39\\lib&#39;,
  19. &#39;C:\\Program Files\\Python39&#39;,
  20. &#39;D:\\MKSD_SITE\\MKSD_WEB\\site&#39;,
  21. &#39;D:\\MKSD_SITE\\MKSD_WEB\\site\\lib\\site-packages&#39;]
  22. Server time: Sun, 04 Jun 2023 16:39:42 +0000

views.py

  1. def Kontact(request):
  2. if request.method == &#39;POST&#39;:
  3. contact = Contact()
  4. message_name = request.POST.get(&#39;message-name&#39;)
  5. from_email = request.POST.get(&#39;from-email&#39;)
  6. ville = request.POST.get(&#39;ville&#39;)
  7. message = request.POST.get(&#39;message&#39;)
  8. contact.name = message_name
  9. contact.email = from_email
  10. ville = ville
  11. contact.subject = message
  12. contact.save()
  13. message = f&quot;&quot;&quot;
  14. Name: {message_name}
  15. From: {from_email}
  16. Stadt: {ville}
  17. New message: \n\n{message}
  18. &quot;&quot;&quot;
  19. # Send email
  20. send_mail(
  21. message_name, #subject
  22. message, #message
  23. from_email, #from email
  24. [&#39;kontakt.mksd@gmail.com&#39;], #to email
  25. fail_silently=False,
  26. )
  27. return render(request, &#39;contact.html&#39;, {&#39;message_name&#39;: message_name})
  28. else:
  29. return render(request, &#39;contact.html&#39;, {})

models.py

  1. class Contact(models.Model):
  2. name = models.CharField(max_length=50)
  3. email = models.EmailField(max_length=50)
  4. ville = models.CharField(max_length=100)
  5. subject = models.TextField(max_length=355)
  6. def __str__(self):
  7. return self.name

Template - HTML

  1. &lt;div class=&quot;row&quot;&gt;
  2. &lt;form method=&quot;post&quot; class=&quot;was-validated&quot;&gt;
  3. {% csrf_token %}
  4. &lt;div class=&quot;col-lg-6&quot;&gt;Email (erforderlich):
  5. &lt;input type=&quot;email&quot; name=&quot;from-email&quot; class=&quot;form-control mb-30&quot; placeholder=&quot;Your Email&quot; required&gt;
  6. &lt;/div&gt;
  7. &lt;div class=&quot;col-lg-6&quot;&gt;Phone
  8. &lt;input type=&quot;phone&quot; name=&quot;phone&quot; class=&quot;form-control mb-30&quot; placeholder=&quot;yours&quot;&gt;
  9. &lt;/div&gt;
  10. &lt;div class=&quot;col-lg-6&quot;&gt;Name (erforderlich):
  11. &lt;input type=&quot;name&quot; name=&quot;name&quot; class=&quot;form-control mb-30&quot; placeholder=&quot;Name&quot; required&gt;
  12. &lt;/div&gt;
  13. &lt;div class=&quot;col-lg-6&quot;&gt;Stadt
  14. &lt;input type=&quot;stadt&quot; name=&quot;stadt&quot; class=&quot;form-control mb-30&quot; placeholder=&quot; City&quot;&gt;
  15. &lt;/div&gt;
  16. &lt;br&gt;&lt;br&gt;&lt;br&gt;
  17. &lt;div class=&quot;col-12&quot;&gt;
  18. &lt;textarea name=&quot;text&quot; class=&quot;form-control mb-30&quot; placeholder=&quot;text&quot;&gt;
  19. &lt;/textarea&gt;
  20. &lt;/div&gt;
  21. &lt;div class=&quot;col-12 my-3&quot;&gt;
  22. &lt;button type=&quot;submit&quot; class=&quot;btn btn-success&quot;&gt;
  23. Send
  24. &lt;/button&gt;
  25. &lt;/div&gt;
  26. &lt;/form&gt;
  27. &lt;/div&gt;

答案1

得分: 2

输入元素的名称是 name,而不是 message-name,与 ville(即 stadt)和 message(即 text)在你的HTML表单中相同,因此你可以使用以下方式:

  1. # views.py:
  2. def kontakt(request):
  3. if request.method == 'POST':
  4. message_name = request.POST['name']
  5. from_email = request.POST['from-email']
  6. ville = request.POST['stadt']
  7. message = request.POST['text']
  8. Contact.objects.create(
  9. name=message_name, email=from_email, ville=ville, subject=message
  10. )
  11. message = f"""
  12. Name: {message_name}
  13. From: {from_email}
  14. Stadt: {ville}
  15. New message: \n\n{message}
  16. """
  17. # 发送电子邮件
  18. send_mail(
  19. message_name, # 主题
  20. message, # 消息
  21. from_email, # 发件人电子邮件
  22. ['kontakt.mksd@gmail.com'], # 收件人电子邮件
  23. fail_silently=False,
  24. )
  25. return redirect('<em>name-of-some-view</em>')
  26. else:
  27. return render(request, 'contact.html', {})

同时使用多种(自然)语言通常是一个不好的想法。你似乎同时使用英语、德语和法语,这会使一切变得非常混乱。

注意:请在request.POST[&#39;ville&#39;]上使用 request.POST.get(&#39;ville&#39;)。使用.get(...) 通常只是消除错误,但不能解决问题:如果键丢失,则确实会起作用。但如果确实需要该键的值,那么后续过程中可能会带来更多麻烦。

注意:最好使用Form而不是手动验证和清理数据。Form不仅会简化在HTML中渲染表单,还会更方便地验证输入并清理数据到更方便的类型。

注意:在成功的POST请求的情况下,应进行重定向以实现Post/Redirect/Get模式。这可以避免在用户刷新浏览器时再次进行相同的POST请求。

英文:

The name of the input element is name, not message-name, the same with ville which is stadt and message which is text in your HTML form, so you use:

<pre><code># views.py:
def kontakt(request):
if request.method == 'POST':
message_name = request.POST[<b>'name'</b>]
from_email = request.POST['from-email']
ville = request.POST[<b>'stadt'</b>]
message = request.POST[<b>'text'</b>]
Contact.objects.create(
name=message_name, email=from_email, ville=ville, subject=message
)
message = f&quot;&quot;&quot;

  1. Name: {message_name}
  2. From: {from_email}
  3. Stadt: {ville}
  4. New message: \n\n{message}
  5. &amp;quot;&amp;quot;&amp;quot;
  6. # Send email
  7. send_mail(
  8. message_name, # subject
  9. message, # message
  10. from_email, # from email
  11. [&#39;kontakt.mksd@gmail.com&#39;], # to email
  12. fail_silently=False,
  13. )
  14. return redirect(&#39;&lt;em&gt;name-of-some-view&lt;/em&gt;&#39;)
  15. else:
  16. return render(request, &#39;contact.html&#39;, {})&lt;/code&gt;&lt;/pre&gt;

It is often a bad idea to use multiple (natural) languages concurrently. You seem to partly English, German and French, making it all very confusing.


> Note: Please use request.POST[&#39;ville&#39;] over request.POST.get(&#39;ville&#39;). Using <code>.get(&hellip;)</code> often only silences the error, but not the problem: indeed it will work if the key is missing. But if the value for that key is really required, it will only result in more trouble later in the process.


> Note: It is better to use a Form&nbsp;<sup>[Django-doc]</sup>
> than to perform manual validation and cleaning of the data. A Form will not
> only simplify rendering a form in HTML, but it also makes it more convenient
> to validate the input, and clean the data to a more convenient type.


> Note: In case of a successful POST request, you should make a redirect
> <sup>[Django-doc]</sup>

> to implement the Post/Redirect/Get pattern&nbsp;<sup>[wiki]</sup>.
> This avoids that you make the same POST request when the user refreshes the
> browser.

huangapple
  • 本文由 发表于 2023年6月5日 00:58:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/76401492.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定