Python 在Django Rest框架中填充唯一ID
我试图使我在类Animal中的ID唯一,这样它就可以自动递增,而无需用户将数据添加到该字段中(因此该字段是隐藏的),但我不知道如何做到这一点 现在我的Python 在Django Rest框架中填充唯一ID,python,django,django-rest-framework,Python,Django,Django Rest Framework,我试图使我在类Animal中的ID唯一,这样它就可以自动递增,而无需用户将数据添加到该字段中(因此该字段是隐藏的),但我不知道如何做到这一点 现在我的models.py中有这个: class Animal(models.Model): id = models.CharField(max_length=100, blank=True, unique=True, default=uuid.uuid4, primary_key=True) name = models.CharFiel
models.py中有这个:
class Animal(models.Model):
id = models.CharField(max_length=100, blank=True, unique=True, default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=200)
在我看来,这必须使id唯一,但目前它没有任何作用
以下是我的serialisers.py
供参考:
class AnimalSerialiser(serializers.HyperlinkedModelSerializer):
doctor = DoctorSerealiser(read_only=True)
class Meta:
model = Animal
fields = ('id' , 'name' , 'gender' , 'breed' , 'adoption' , 'vaccines', 'doctor')
正如其他人在评论中提到的,您定义的模型是错误的。默认情况下,Django会添加一个自动递增字段。查看文档以了解更多信息-
你真的只需要:
class Animal(models.Model):
name = models.CharField(max_length=200)
然后您仍然可以访问该字段,如animal.id
UUID与自动递增ID完全不同。请参见-它们基本上只是字符串,几乎不可能生成重复的字符串。什么是“什么都不做”?因此它显示字段,我可以省略ID,并显示为“”
在我的表和数据库中为什么使用UUID作为主键?为什么不使用普通的自动字段?您不需要自己设置id
字段。如果不创建id
字段,它将基于DB自动增加其值。另外,使用UUID作为PK是个坏主意。是的,django为您创建了一个名为id
的自动字段。您可以使用字段名id
在页面中进行访问,并尝试了您的建议,但如果字段还设置了“primary_key=True”,则获取此错误“id”只能用作字段名。
@user3395936-您是否迁移或删除并重新创建了数据库?