首页 > 解决方案 > /collection/order/ FOREIGN KEY 约束处的 IntegrityError 添加新对象时出现错误

问题描述

嗨,我刚刚学习 django 并尝试创建一个模型表单,它在项目和订单之间具有多种关系,下面是我的代码片段。

models.py
class Item(models.Model):
    name = models.CharField(max_length=25,default="",primary_key=True)
    weight = models.FloatField()
    def __str__(self):
        return  self.name

class Order(models.Model):
    customername = models.CharField(max_length=25,default="")
    item = models.ManyToManyField(Item,default="")
    metal = models.ForeignKey(Material,on_delete=models.CASCADE)
    price = models.IntegerField()
    place = models.CharField(max_length=25)
    orderdate = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return  self.customername

forms.py:

from django import forms
from .models import Order, Material, Item
class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = '__all__'
class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = '__all__'

views.py:
def ItemSaveorUpdate(request):
    if request.method == 'POST':
        form = ItemForm(request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request,messages.SUCCESS,"Movie rating submitted succesfully")
    else:
       form = ItemForm()
    return render(request,'addItem.html',{"form":form})
def OrderSaveorUpdate(request):
    if request.method == 'POST':
        form = OrderForm(request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request,messages.SUCCESS,"Order added succesfully")
            return redirect('material')
    elif request.method == 'PUT':
        item = Item.objects.get(pk=id)
        form = OrderForm(instance=item)
        form.save()
    else:
        #item = Item.objects.get(pk=id)
        form = OrderForm()
    return render(request,'addOrder.html',{"form":form})

Template additem.html:
<form action="{% url 'item' %}" request="post">
    {% csrf_token %}
    {{form.as_p }}
    <input type="submit" value="add">
</form>

urls.py:
urlpatterns = [
    path('item/', views.ItemSaveorUpdate, name="item"),
    path('material/', views.MaterialSaveorUpdate, name="material"),
    path('order/', views.OrderSaveorUpdate, name="order"),

我在创建订单时尝试选择多个项目,单击添加后在 /collection/order/ FOREIGN KEY constraint failed 处给出错误 IntegrityError。重要的是要提到订单正在添加,我可以在管理面板中看到,但项目没有被选中。请帮助避免这个问题,让我知道我在这里错过了什么。

谢谢你。

标签: pythondjangoformsdjango-forms

解决方案


通过删除 models.py 中 Order 类中项目字段的默认值解决了该问题

item = models.ManyToManyField(Item,default="")

after removing

item = models.ManyToManyField(Item)

它现在工作正常。

谢谢你。


推荐阅读