python - /home/create/ 处的 IntegrityError(1048,“列 'country_id' 不能为空”)
问题描述
我正在尝试使用 Django 2.7 直接在网页上创建新闻,但在 /home/create/ 处添加类别和国家/地区 IntegrityError 时遇到问题(1048,“列 'country_id' 不能为空”)这是我的代码:主页/模型.py
class Category(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Country(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class News(models.Model):
pub_date = models.DateTimeField('Date: ')
article = models.CharField(max_length=200)
content = models.TextField(default="")
country = models.ForeignKey(Country, on_delete=models.CASCADE)
likes = models.IntegerField(default=0)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.article
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
主页/views.py
def create(request):
if request.method == "POST":
adding = News()
adding.likes = 0
adding.pub_date = timezone.now()
adding.article = request.POST.get("Article")
adding.content = request.POST.get("Content")
adding.category = request.POST.get("Category")
adding.country = request.POST.get("Country")
adding.save()
return HttpResponseRedirect("/home/")
主页/urls.py
from django.urls import path
from . import views
app_name = 'home'
urlpatterns = [
path('', views.index, name='index'),
path('<int:news_id>/', views.detail, name='detail'),
path('create/', views.create),
path('<int:news_id>/delete/', views.delete_news, name='delete'),
]
index.html(我从我的主页添加我的帖子)
<body>
<form method="POST" action="create/" class="post_form">
{% csrf_token %}
<p>
<label>Article</label><br>
<input type="text" name="Article" />
</p>
<p>
<label>Content</label><br>
<input type="text" name="Content" />
</p>
<p>
<label>Category</label><br>
<select>
{% if category %}
{% for el in category %}
<option name="Category">{{ el.name }}</option>
{% endfor %}
{% endif %}
</select>
</p>
<p>
<label>Country</label><br>
<select>
{% if countries %}
{% for el in countries %}
<option name="Country">{{ el.name }}</option>
{% endfor %}
{% endif %}
</select>
</p>
<input type="submit" value="Submit" >
</form>
</body>
请帮忙!
解决方案
您在标签中指定<select>
输入元素的名称,而不是在标签中。因此,您应该将您的表格写为:<select>
<option>
<select name="Country">
{% if countries %}
{% for el in countries %}
<option>{{ el.name }}</option>
{% endfor %}
{% endif %}
</select>
话虽如此,我强烈建议您使用Django 表单[Django-doc]。这些封装了逻辑,减少了出错的可能性,并删除了很多样板代码。
推荐阅读
- electron - Electron Child process access bin
- android - 如何撤消使用 Room 持久库进行的删除?
- mysql - CASE statement for double and null data
- keras - 卷积自编码器keras的高损失
- amp-html - AMP 示例中的嵌套 iFrame 通信
- c# - WPF DataGrid 显示长度而不是路径
- visual-studio-code - vs 代码自动完成和 python 导入 *
- c++ - 带有“预处理”的 Clang Breaks 包括
- c - 调用strcat()时如何使用malloc?
- mysql - API 架构中的行级数据安全性