无法使用 Django ModelForm 排除表中自动生成的列

问题描述 投票:0回答:1

我使用 Django 和 oracle 作为后端。我有一个表“Orders”,它有一个列“order_id”作为主键,该列也设置为在 Oracle 中自动生成 Id。现在我使用模型表单“OrderForm”来添加和更新订单。

现在的问题是,当我尝试添加新订单时,它会抛出错误,提示“无法插入到生成的始终标识列中”。

如何避免自动生成的字段“order_id”列并单独更新其余字段。我尝试排除“order_id”,它不会抛出错误,但不会在数据库中创建记录。

我是 Django 新手..请帮忙。谢谢。

python django
1个回答
0
投票

要在使用 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”字段,从而允许数据库处理其自动生成。根据您的要求重新排列代码。

© www.soinside.com 2019 - 2024. All rights reserved.