我使用 Django 和 oracle 作为后端。我有一个表“Orders”,它有一个列“order_id”作为主键,该列也设置为在 Oracle 中自动生成 Id。现在我使用模型表单“OrderForm”来添加和更新订单。
现在的问题是,当我尝试添加新订单时,它会抛出错误,提示“无法插入到生成的始终标识列中”。
如何避免自动生成的字段“order_id”列并单独更新其余字段。我尝试排除“order_id”,它不会抛出错误,但不会在数据库中创建记录。
我是 Django 新手..请帮忙。谢谢。
要在使用 Django ModelForm 通过 Oracle 数据库创建和更新订单时排除自动生成的标识列('order_id'),您可以在表单的 Meta 类中使用排除属性。
forms.py 文件
from django import forms
from .models import Order
class OrderForm(forms.ModelForm):
class Meta:
model = Order
exclude = ['order_id']
#This OrderForm will automatically exclude the 'order_id' field, allowing you to
#create and update orders without specifying the identity column.
views.py 文件
from django.shortcuts import render, redirect
from .forms import OrderForm
def create_order(request):
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
order = form.save() # Creates a new order without specifying 'order_id'
return redirect('success_page') # Redirect to success page
else:
form = OrderForm()
return render(request, 'create_order.html', {'form': form})
当表单提交且有效时,将调用 form.save(),Django 将创建一个新订单而不指定“order_id”字段,从而允许数据库处理其自动生成。根据您的要求重新排列代码。