次の 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 を使用して作成されたように、DB を読み取ることができました。ただし、Bill テーブルの行の作成に問題がありました。
Bill モデルの単純な形式です。
class BillForm(ModelForm):
class Meta:
model = Bill
fields = ('time', 'address')
問題は、DB シーケンスで生成された ID を取得できないことです。コードでフィールドを生成してから引数として渡す必要があるため、フォームにフィールドを追加するid
ことはできません。データベースよりも、生のクエリなしでは取得できない別の ID が作成されます。