对于我们的Django应用程序,我们希望得到一个AutoField除了1以外的数字.似乎没有明显的方法来做到这一点.有任何想法吗?
我从现有的旧版数据库中创建了两个模型,一个用于文章,一个用于可以与文章关联的标签:
class Article(models.Model):
article_id = models.AutoField(primary_key=True)
text = models.CharField(max_length=400)
class Meta:
db_table = u'articles'
class Tag(models.Model):
tag_id = models.AutoField(primary_key=True)
tag = models.CharField(max_length=20)
article=models.ForeignKey(Article)
class Meta:
db_table = u'article_tags'
Run Code Online (Sandbox Code Playgroud)
我想启用从管理界面为文章添加标签的功能,因此我的admin.py文件如下所示:
from models import Article,Tag
from django.contrib import admin
class TagInline(admin.StackedInline):
model = Tag
class ArticleAdmin(admin.ModelAdmin):
inlines = [TagInline]
admin.site.register(Article,ArticleAdmin)
Run Code Online (Sandbox Code Playgroud)
界面看起来不错,但是当我尝试保存时,得到:
Warning at /admin/webserver/article/382/
Field 'tag_id' doesn't have a default value
我需要添加一个不是主键的 autoinc 字段。我正在将使用自动递增字段的非常大的生产数据库迁移到models.UUIDField. 我一直在进行分段迁移,现在我的所有关系都与这两种字段类型重复。我已准备好进行主键交换,但不幸的是,我仍然需要为旧客户端保留自动递增的整数字段,因为它已被弃用。
由于 django 不允许我定义自动字段primary_key=False(即使 db 层完全支持),我正在寻找一个简单的解决方案。我最初的策略是简单地将字段更改为models.BigIntegerField('GUID', db_index=True, null=True, unique=True),然后nextval('my_guid_seq'::regclass)使用migrations.RunSQL. 到目前为止一切顺利,除了没有。事实证明,由于我的null=True声明,ORM 层的 django 正在接管和插入null,这将不允许数据库层的默认值来完成它的工作。
由于糟糕的设计,核心开发人员很快就拒绝了这个请求,我绝对同意这一点,但是有非常有效的用例,例如这样。https://code.djangoproject.com/ticket/8576
我是一个非常弱的 Django 开发人员,所以我不想在 ORM 层参与杂草元编程。根据定义,这是一个 hack,所以我正在寻找最简单、最有创意的解决方案来解决这个限制
我有一个SaaS宠物项目用于开发票.在这里面,我想我的客户每票号1001开始很显然,我不能在Postgres的用一个简单的汽车领域,只是加1000的值,因为我所有的客户端将共享同一个数据库和同一个tickets表.我尝试使用整数列类型和查询(伪SQL)SELECT LATEST number FROM tickets WHERE client_id = [current client ID]来获取最新的数字,然后使用该数字+ 1来获取下一个数字number.问题在于,通过并发,两张票很容易以这种方式以相同的数字结尾.我需要能够在Django中或使用原始SQL(使用Bash或其他任何类型)执行此操作的数字.
我不是在寻找一种强迫我的榜样工作的方法.我只是在寻找一个解决方案来解决我需要为每个客户端单独增加票号的问题.
我做了这个 django 模型:
class Car(models.Model):
car_id = models.AutoField(primary_key=True)
engine_size = models.FloatField()
fuel_consumption = models.FloatField()
def __str__(self):
return(str(self.car_id))
Run Code Online (Sandbox Code Playgroud)
django中的自动字段生成器总是从1开始。如何让它从初始值=100生成id。例如,100,101,102...
是否有任何内置工具,或者我只需要为此创建一个自定义函数?
autofield ×5
django ×5
python ×2
django-admin ×1
postgresql ×1
primary-key ×1
sequence ×1
sql ×1