添加新对象时,/collection/order/FOREIGN KEY约束处的IntegrityError失败错误

2024-03-29 11:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我刚刚在学习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处给出错误IntegrityError/ 外键约束失败。重要的是要提到的是,订单正在添加,我可以看到在管理面板,但项目没有得到选择。 请帮助避免这个问题,让我知道我错过了什么

多谢各位


Tags: namepyselfformaddreturnmodelsrequest
1条回答
网友
1楼 · 发布于 2024-03-29 11:27:19

通过在models.py中删除Order类中项目字段的默认值,问题得以解决

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

after removing

item = models.ManyToManyField(Item)

它现在运转良好

多谢各位

相关问题 更多 >