【问题标题】:Django- Foreign key constraint failed related errorDjango-外键约束失败相关错误
【发布时间】:2019-10-24 22:10:11
【问题描述】:

我是 Django 的新手,我正在做一个项目类别练习。每个项目都通过外键属于一个类别。在提交项目详细信息期间,我无法理解代码中的问题。我收到一个错误“外键约束失败”。

我为 models.py 编写了代码,它在 Django 的管理仪表板中运行良好,但如果我试图通过 HTML 表单页面实现相同的东西,我会出错。

    models.py

class ColorCat(models.Model):

    name = models.CharField(max_length=20, default="other")
    def __str__(self):
        return self.name

class ListItems(models.Model):
    name = models.CharField(max_length=25, default='item')
    item_cat = models.ForeignKey(ColorCat, on_delete=models.CASCADE, default=0, null=True,blank=True)
views.py

def index(request):
    list = ListItems.objects.all()
    cat = ColorCat.objects.all()
    return render(request, 'colorlist.html', {'color': cat, 'item':list })


def colorlist(request):
    new_list = ListItems
    new_cate = ColorCat

    if request.method=="POST":

        item = str(request.POST["item"])
        cat = str(request.POST["category"])
        f_key = ColorCat.objects.filter(name="orange").get()
        new_list(name="item").save()
        new_list(item_cat=f_key.id).save()
    item = ListItems.objects.all()
    color = ColorCat.objects.all()
    return render(request, 'colorlist.html', {"item": item, "color": color})


def addcat(request):
    if request.method=="POST":
        newcat = str(request.POST["name"])
        ColorCat(name = newcat).save()
        item = ListItems.objects.all()
        color = ColorCat.objects.all()
    return render(request, 'colorlist.html', {"item":item, "color":color})

colorlist.html
{% extends 'base.html'%}
{% block content%}
<h2>Welcome in color cards</h2>


    <form action="addcat" method="POST">
        {% csrf_token %}
        <lable>add new cat<input type="text" name="name"></lable><br>
        <label>submit<input type="submit"></label>

    </form>


    <form action="colorlist" method="post">
        {% csrf_token %}
        <label>new item<input type="text" name="item"></label><br>
        <label>cat<input type="text" name="category"></label><br>
        <label>add item<input type="submit"></label>

    </form>

<!--see saved result-->

    <table>
        <tr>
            <th>categories</th>
        </tr>
        {% for cat in color %}
        <tr>
            <td>{{cat.name}}</td>
        </tr>
        {% endfor %}
    </table>


    <table>
        <tr>
            <th>category item </th>
        </tr>

        {% for clr in color %}

        {% for itm in item %}

        <tr>
            {% if clr.name == itm.category %}

            <td>{{itm.name}}</td>
            {%endif%}

        </tr>
        {% endfor %}
        {% endfor %}
    </table>

{% endblock %}

错误 /color/colorlist 处的 IntegrityError FOREIGN KEY 约束失败

【问题讨论】:

  • 注:1。在views.py中,在某个地方(f_key =ColorCat.objects.filter(name="orange").get())我手动给出了“橙色”的值。 2. 在views.py 中,colorlist() 直到行“f_key = ColorCat.objects.filter(name="orange").get()”代码运行正常但是“new_list(name="item").save() " 开始抛出错误

标签: python django sqlite


【解决方案1】:

我还没有把你所有的代码都写完 - 有很多不相关的东西 - 但我注意到了几个错误:

  • ListItems 模型的定义,为字段item_cat 定义默认值没有意义,它会尝试将实例与ID 为0ColorCat 实例链接,这可能不会不存在
item_cat = models.ForeignKey(ColorCat, on_delete=models.CASCADE, null=True, blank=True)
  • 保存new_list - 使用ColorCat 实例而不是它的id
    new_list(item_cat=f_key).save()

【讨论】:

  • @sanghmitra 如果此答案对您有所帮助,请接受此答案将您的问题标记为已解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多