Django - ограничение внешнего ключа не удалось, связанная ошибка - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в Джанго, я делаю упражнение в категории предметов. Каждый элемент относится к категории через внешний ключ. Я не могу понять проблему в моем коде во время передачи сведений об элементе. Я получаю сообщение об ошибке «Сбой ограничения FOREIGN KEY».

Я написал код для 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 %}

Ошибка IntegrityError в / color / colorlist Сбой ограничения FOREIGN KEY

1 Ответ

0 голосов
/ 24 октября 2019

Я не исчерпал весь ваш код - там много ненужных вещей - но я заметил пару ошибок:

  • определение модели ListItems, это не имеет смыслачтобы определить значение по умолчанию для поля item_cat, он попытается связать экземпляр с ColorCat экземпляром с идентификатором 0, который, вероятно, не существует
item_cat = models.ForeignKey(ColorCat, on_delete=models.CASCADE, null=True, blank=True)
  • сохранение new_list - используйте ColorCat экземпляр вместо id
    new_list(item_cat=f_key).save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...