は、このSQLクエリを使用して作成されたデータベーステーブルを考える:レガシーデータベースを使用したDjango - DBシーケンスの操作方法?
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;
私はinspectdb
のコマンドを実行しているので、DjangoのORMでそれを使用する必要があります。
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テーブルに行を作成する際に問題がありました。
class BillForm(ModelForm):
class Meta:
model = Bill
fields = ('time', 'address')
問題は、私はDBのシーケンスで生成されたIDを取得することができないということです。
これは、ビル・モデルの単純な形式です。フォームにid
フィールドを追加すると、コードで生成して引数として渡す必要があるため、機能しません。データベースでさえも、未処理の照会なしでは検索できない異なるIDが作成されます。