gpt4 book ai didi

具有 unique_together 且没有自动递增 id 主键的 Django 模型

转载 作者:行者123 更新时间:2023-11-29 12:57:15 26 4
gpt4 key购买 nike

所以我有一个 Django 模型,其中存储了 5 天的数据,因为数据量太大,我们必须删除所有超过 5 天的数据。该模型当前具有 Django 自动创建的自动递增 id 字段。这里的问题是很快它将无法生成足够大的主键。

理想情况下,我有一个复合主键,但 Django 还不支持这个。所以我正在查看 unique_together 并想知道是否可以将其用作伪 pk 并删除自动递增的 id,因为它实际上并未用于应用程序中的任何内容。

另一个选项是这个模块:django-compositekey但我不确定它的支持情况如何?

在任何一种情况下,我都需要组合 4 列来制作唯一记录:

class MassObservations(models.Model):
time = models.DateTimeField()
star = models.ForeignKey('Stars')
property = models.ForeignKey('Properties')

observatories = (('1', 'London'),
('2', 'China'),
('3', 'United States'))

station = models.CharField(max_length=2, choices=observatories)
mass = models.FloatField()

class Meta:
unique_together = ('time', 'star', 'property', 'station')

关于如何像这样处理数据/Django 表还有其他想法吗?

最佳答案

您可以像这样使用 UUID,而不是使用整数作为主键:

import uuid
from django.db import models

class MassObservations(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
... rest of your fields ...

即使有您的记录数量,冲突也“不太可能”发生。

一般来说没有主键是“坏的”。为什么?想想你如何删除一条记录。

或者,您可以创建自定义“bigint”主键,如下所述:

Django BigInteger auto-increment field as primary key?

(不太可能你很快就用完了 :D)

关于具有 unique_together 且没有自动递增 id 主键的 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39985205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com