Django模型未自动创建ID
我试图保存一个简单的设备模型,它有三个字段:用户名、设备名称和制造商 查看数据库中的模型,添加了一个ID字段作为主键。此字段应自动递增 在阅读了一些文档之后,我尝试重新创建以下内容:Django模型未自动创建ID,django,python-3.x,Django,Python 3.x,我试图保存一个简单的设备模型,它有三个字段:用户名、设备名称和制造商 查看数据库中的模型,添加了一个ID字段作为主键。此字段应自动递增 在阅读了一些文档之后,我尝试重新创建以下内容: Auto-incrementing primary keys¶ If a model has an AutoField — an auto-incrementing primary key — then that auto-incremented value will be calculated and sav
Auto-incrementing primary keys¶
If a model has an AutoField — an auto-incrementing primary key — then that
auto-incremented value will be calculated and saved as an attribute on your
object the first time you call save():
>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id # Returns None, because b doesn't have an ID yet.
>>> b2.save()
>>> b2.id # Returns the ID of your new object.
对我的设备型号执行此操作时:
>>> d = Device("username123", "device12", "manufact12")
>>> d.id
>>> 'username123'
如果我试图保存此模型,将出现以下错误:
ValueError: invalid literal for int() with base 10: 'username123'
因此,它试图将“username123”保存为ID。如果我创建以下设备:
>>> d = Device("1", "username123", "device12", "manufact12")
它创建的设备没有问题
有人能解释为什么会这样吗
编辑:看到第一个回复后,我的帖子似乎不清楚。这是我来自Django的模型:
class Device(models.Model):
username = models.CharField(max_length=100)
device_name = models.CharField(max_length=100)
manufacturer = models.CharField(max_length=100)
它没有ID。正如我在帖子中所说的,当我尝试创建没有ID的模型时(正如我预期的那样),它会给我一个错误。如果我显式地声明一个ID,它就可以工作,但正如你所说的,这不是应该工作的方式 您需要了解自动递增的含义。这意味着它是一个自身增加的整数,所以您无需在每次创建数据库记录时为其分配新的整数。如果插入第一条记录,数据库将自动将其id设置为
1
。下次插入记录时,数据库会给它id2
,依此类推
您试图将username123
赋予id字段,django(以及任何人)都无法知道username123
的下一个可用id是什么
因此,最好的做法是:永远不要显式地为模型对象提供id,因为数据库将为您生成一个id。我希望这是有道理的
编辑:
决不能以这种方式创建对象:
d = Device("username123", "device12", "manufact12")
对于sql语句和django来说,这也是一种常见的错误做法:不指定接受哪个值的字段。如果以后更改了模型,则会将值指定给错误的字段。始终这样做:
d = Device(field1="username123",
field2="device12",
field3="manufact12")
同样为了完整性,您的错误告诉您:因为您没有指定将哪个值分配给哪个字段,所以我会按顺序分配它们,所以第一个值应该分配给
id
。但是,由于id
字段是一个整数字段(自动递增),因此我将尝试使用int()
将其转换为整数并存储值。但是显然int(“username123”)
是无效的语句,因此出现了错误。是的,您的编辑修复了这个问题。有趣。我仍然不明白为什么A)希望我指定ID,或者B)如果我没有指定ID,就给我一个错误。Django文档中没有一个谈到指定ID,就好像它是在保存模型时创建的一样。见鬼,就连我上面从Django docs中给出的例子也显示了我刚才所描述的。太好了,谢谢你的完整答案。干得好!我没有代表投票给你,但这是你应得的!