Python Django中的未知整数错误
我有一个小项目,通过Django和Latex创建我的账单,直到今天为止,这两个项目一直运作良好。现在当我尝试添加另一个服装时,Django抛出 以下是相关的模型定义:Python Django中的未知整数错误,python,django,Python,Django,我有一个小项目,通过Django和Latex创建我的账单,直到今天为止,这两个项目一直运作良好。现在当我尝试添加另一个服装时,Django抛出 以下是相关的模型定义: class Kunde(models.Model): name = models.CharField('Name', max_length = 200) vorname = models.CharField('Vorname', max_length = 200) geburtsdatum = model
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,则使用数据类型。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');
如果第一个显示4条ID为1、2、3和4的记录,并且序列回答为4,则一切正常。我将继续使用django源代码,以了解为什么它们在创建对象时传递ID而不依赖于序列。在这种情况下,django shell可能是一个很好的起点
否则,我会修正顺序,问自己这是怎么发生的,因为这几乎不是博士后在这一点上犯错误的情况
SELECT setval('kunden_kundearbeitsamt_id_seq', (SELECT max(id) FROM kunden_kundearbeitsamt));
哪个数据库在后面?创建对象的代码是什么?你是手动设置id还是让Django处理这个问题?@kichik:Django,更新了这个问题。这就是模型的全部代码。我会先查看表格,找出内容,然后找出django想要设置一个已经使用的ID的原因。在postgres上,检查相应的序列以获得下一个值。你能包括使用模型创建对象的代码吗?太棒了,谢谢你的背景资料。我最终使用了SELECT setval'kunden_kundearbeitsamt_id_seq',从kunden_kundearbeitsamt选择maxid;更改序列值。我已将您的解决方案添加到答案中。我记得通过Postco插入的条目可能导致了错误。再次感谢你的回答,继续努力!
SELECT setval('kunden_kundearbeitsamt_id_seq', (SELECT max(id) FROM kunden_kundearbeitsamt));