给定一个使用此 SQL 查询创建的数据库表:
CREATE TABLE Bill
(
Time DATE NOT NULL ,
Address VARCHAR2 (60) NOT NULL ,
ID NUMBER NOT NULL
) ;
ALTER TABLE Bill ADD CONSTRAINT Bill_PK PRIMARY KEY ( ID ) ;
CREATE SEQUENCE Bill_ID_SEQ START WITH 1 NOCACHE ORDER ;
CREATE OR REPLACE TRIGGER Bill_ID_TRG BEFORE
INSERT ON Paragony FOR EACH ROW BEGIN :NEW.ID := Bill_ID_SEQ.NEXTVAL;
END;
我必须将它与 Django ORM 一起使用,所以我有运行inspectdb
命令。它是自动生成的代码:
class Bill(models.Model):
time = models.DateField()
address = models.CharField(max_length=60)
id = models.IntegerField(primary_key=True)
class Meta:
managed = False
db_table = 'bill'
将其保存到应用程序models.py
文件并运行迁移后,一切都很好。我可以像使用 ORM 创建数据库一样读取数据库。但是,在 Bill 表中创建行时存在问题。
比尔模型的简单形式:
class BillForm(ModelForm):
class Meta:
model = Bill
fields = ('time', 'address')
问题是我无法检索使用 DB 序列生成的 ID。将id
字段添加到表单将不起作用,因为我们必须使用代码生成它,然后作为参数传递。即使数据库将创建不同的 ID,如果没有原始查询,这些 ID 将无法检索。