【问题标题】:IntegrityError at /home/create/ (1048, "Column 'country_id' cannot be null")/home/create/ 处的 IntegrityError(1048,“列 'country_id' 不能为空”)
【发布时间】:2020-04-08 22:21:36
【问题描述】:

我正在尝试使用 Django 2.7 直接在网页上创建新闻,但是在 /home/create/ 处添加类别和国家/地区 IntegrityError 时遇到问题(1048,“列 'country_id' 不能为空”) 这是我的代码: 主页/models.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)

home/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>

请帮忙!

【问题讨论】:

  • 应该是&lt;select name="Country"&gt;,而不是&lt;option&gt;s。

标签: python django django-2.x


【解决方案1】:

您在&lt;select&gt; 标记中指定&lt;select&gt; 输入元素的名称,不是&lt;option&gt; 标记中。因此,您应该将表单编写为:

<select name="Country">
    {% if countries %}
        {% for el in countries %}
            <option>{{ el.name }}</option>
        {% endfor %}
    {% endif %}
</select>

话虽如此,我强烈建议您与Django forms [Django-doc] 合作。这些封装了逻辑,减少了出错的可能性,并去除了大量的样板代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 2018-10-13
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2020-06-12
    相关资源
    最近更新 更多