簡體   English   中英

Django 中的未知完整性錯誤

[英]Unknown IntegrityError in Django

我有這個小項目通過DjangoLatex創建我的賬單,直到今天它都完美無缺。 現在,當我嘗試添加另一個客戶時, Django拋出

duplicate key value violates unique constraint "kunden_kundearbeitsamt_pkey"
DETAIL:  Key (id)=(4) already exists.


這些是有問題的模型定義:

 class Kunde(models.Model): name = models.CharField('Name', max_length = 200) vorname = models.CharField('Vorname', max_length = 200) geburtsdatum = models.DateField('Geburtsdatum', max_length = 200) untersuchungsdatum = models.DateField('Untersuchungsdatum', max_length = 200) class Meta: abstract = True class KundeArbeitsamt(Kunde): kundennummer = models.CharField('Kundennummer', max_length = 100) bglnummer = models.CharField('BGL-Nummer', max_length = 100) empfaenger = models.ForeignKey('rechnungen.NumberToEmpfaenger', blank = True, null = True) class Meta: verbose_name = "Proband Arbeitsamt" verbose_name_plural = "Proband Arbeitsamt" def __str__(self): return '{}, {}'.format(self.name, self.vorname)


創建對象的管理部分(我猜沒什么特別的):

 from django.contrib import admin from .models import KundeArbeitsamt class KundeArbeitsamtAdmin(admin.ModelAdmin): ordering = ('name',) admin.site.register(KundeArbeitsamt, KundeArbeitsamtAdmin)

我發誓,我沒有對數據庫 (Postgres) 進行任何遷移或其他更改。 Django正在處理對象的創建。 是什么導致了此錯誤以及如何修復它?

此錯誤是由您的數據庫引發的,因為 django 想要添加一個 ID ( =4 ) 已在使用中的新列。

要進一步調查,您需要找到負責創建 ID 的應用程序部分。 Django 通常將此任務委托給您的數據庫。 在 postgres 的情況下,使用數據類型serial Postgres 為此使用所謂的序列,並為您生成並執行以下 SQL:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

我現在將開始像這樣檢查數據庫的完整性:

-- views contents of the table
SELECT * FROM kunden_kundearbeitsamt;
-- check the sequence
select currval('kunden_kundearbeitsamt_id_seq');

如果第一個顯示 ID 為 1、2、3 和 4 的 4 條記錄,而序列答案為 4,則一切正常。 我將繼續使用 django 源來弄清楚為什么它們在不依賴序列的情況下在對象創建時傳遞 ID。 在這種情況下,django shell 可能是一個很好的起點。

否則我會修復序列並問自己這是如何發生的,因為此時 postgres 幾乎不會出錯。

SELECT setval('kunden_kundearbeitsamt_id_seq', (SELECT max(id) FROM kunden_kundearbeitsamt));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM