Actuellement, j'ai un projet Django avec une table ItemReport
qui ne permet qu'une entrée par jour et par article. Tout va bien et tout, sauf que chaque fois qu'il échoue avec un IntegrityError (ie mon projet a essayé de créer un ItemReport
un jour où un existe déjà ItemReport
, les incréments d'identification de l'objet de toute façonComment arrêter Django/PSQL de l'ID de table à incrémentation automatique en cas d'échec de création
Par exemple:.
September 1:
Report for September 1 (ID 1)
September 2:
Report for September 1 (ID 1)
Report for September 2 (ID 5)
modèles suivants:
class ItemReport(BaseModel):
fk_item: Item = models.ForeignKey(Item, null=False)
date = models.DateField(default=now, null=False)
class Meta:
unique_together=(('fk_item', 'date'),)
class Item(BaseModel):
item_class = models.CharField(max_length=40, null=False)
name = models.CharField(max_length=80, unique=True, null=False)
Bit de code qui est exécuté à chaque fois qu'un utilisateur se connecte à:
for i in Item.objects.all():
try:
latest_ir = ItemReport.objects.create(fk_item=i)
print('Created Item Report!')
except IntegrityError as e:
print('ItemReport for {} for today already exists!'.format(i.name))
print('Created ItemReports!\n')
Ne comptez pas sur les ID étant des valeurs particulières. Ils devraient être complètement indépendants de votre logique métier. –
Donc, vous dites que l'utilisation d'ID dans la logique est une mauvaise pratique? J'allais les utiliser comme un moyen de s'assurer que les tables sont synchronisées correctement entre les serveurs. Si ce n'est pas par ID, alors, des idées sur une meilleure façon de le faire? – Dilisqq