要在Django模型中添加一个可以自增长但不是primary_key的字段,可以按照以下步骤操作:

  • 1.首先,创建一个新的字段,例如auto_field,并将其设置为models.IntegerField类型。
class MyModel(models.Model):
    name = models.CharField(max_length=100)
    primary_key_field = models.CharField(max_length=100, primary_key=True)
    auto_field = models.IntegerField(default=0)

在这个例子中,primary_key_field是一个字符串类型的primary_key,而auto_field是一个整数类型的字段,其默认值为0。

  • 2.然后,在模型的Meta类中,将managed属性设置为False,以便Django不会为该模型创建数据库表。

这样,auto_field字段将根据需求自动生成,但不会在数据库表中创建单独的字段。

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    primary_key_field = models.CharField(max_length=100, primary_key=True)
    auto_field = models.IntegerField(default=0)

    class Meta:
        managed = False
  • 3.在代码中,可以通过访问auto_field字段来获取或设置其值。例如:
my_obj = MyModel.objects.create(name='example')
print(my_obj.auto_field)  # 输出:1
my_obj.auto_field = 42
my_obj.save()
print(my_obj.auto_field)  # 输出:42

请注意,由于managed属性设置为False,因此Django不会自动更新auto_field字段。

因此,在更新auto_field值时,需要手动调用save()方法。

虽然这种方法可以实现自增长非primary_key字段,但请注意,这种做法不符合Django的最佳实践。

在实际开发中,应尽量遵循Django的官方建议,使用整数类型的AutoField作为primary_key,并将其设置为models.IntegerField类型。

这样可以确保数据的一致性和模型的正常运行。

但是话又说回来了,最佳实践?功能都完不成,还管你是不是最佳实践?能跑起来后,有空了才是思考这个的时候......大家可千万别学我

django 模型内取消了id的自增长及primary_key,如果新增一个可以自增长却不是primary_key的字段?

声明:如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。None#python87.com