python - /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。重要的是要提到订单正在添加,我可以在管理面板中看到,但项目没有被选中。请帮助避免这个问题,让我知道我在这里错过了什么。
谢谢你。
解决方案
通过删除 models.py 中 Order 类中项目字段的默认值解决了该问题
item = models.ManyToManyField(Item,default="")
after removing
item = models.ManyToManyField(Item)
它现在工作正常。
谢谢你。
推荐阅读
- numpy - numpy数组缓存查找的有效方法?
- javascript - 正确初始化由 JavaScript 创建的 Blazor 实例
- javascript - 如何实现按钮禁用功能或其他技术,使用户不会登录两次?反应,表达
- python-3.x - 点击显示更多按钮;用 python 刮硒
- javascript - 未捕获的引用错误(无法读取 JSON 文件)
- amazon-web-services - 在 AWS CloudFromation 和无服务器中组织堆栈和共享资源
- django - 在 Django 中将模型导入表单
- javascript - 每个第三个元素的过滤器数组
- sql-server - 查看总结产品
- angular - CORS 策略已阻止从源“http://localhost:4200”访问“https://maps.googleapis.com/maps/api/place/details”处的 XMLHttpRequest: