当我将书籍模型添加到数据库,然后查看SQL数据库浏览器中的书籍表时,它将id字段显示为空白。
这很奇怪,因为我在表中有1000个项目。我不知道发生了什么,因为他们中有390人已经填充了他们的ID。其他人的身份空白。
id字段本质上不应该是主键吗?如何在某些情况下填充,而不是其他情况。
注1:过去我手动删除了记录 - 不确定是否存在问题。
注意2:当我print "newbook id:", repr(newbook.id)
时,id与SQL数据库浏览器中看到的主键不同。
这就是我所看到的:
相关代码如下:
型号:
class Books (models.Model):
bookname=models.CharField(_('bookname'), max_length=255)
publisher=models.CharField(_('publisher'), max_length=255)
description=models.TextField(_('description'), blank=True)
coverart = models.ImageField(upload_to="art", blank=True, null=True)
source=models.TextField(blank=True) #source of where it came from
last_updated=models.DateTimeField(_('added'), default=datetime.now)
category_id=models.ManyToManyField(Category, related_name='cat')
model = models.ManyToManyField ('model', related_name = 'model')
shortdesc=models.TextField(_('description'), blank=True)
url = models.TextField(_('url'), blank=True)
uid = models.IntegerField()`
保存图书的代码:
try:
exists = Books.objects.get(bookname=bookname)
except Books.DoesNotExist:
print "book does not exist -- adding now"
newbook=Books(bookname=bookname, uid = uid, source='Mysourceofbooks', publisher=publisher, description = description, shortdesc=shortdesc, url = url)
newbook.save()
for cat in category_ids:
newbook.category_id.add(cat)
else:
print "log: we found the book in the DB already"`
答案 0 :(得分:2)
根据聊天中的讨论:id
表中的Book
列以某种方式设法失去了PRIMARY KEY
的状态。把它放回去,你应该好好去。
答案 1 :(得分:-1)
首先,您可以使用函数get_or_create来测试/保存模型。 它返回元组 - 对象,已创建。
如果可以使用新id保存对象:将object.pk设置为None,并保存。 在你的代码中更疯狂的想法。 => Book是Book的模型的更好名称。
您如何看待这个:
for cat in category_ids:
print cat
newbook.category_id.add(cat)
什么是category_ids变量? 为什么为ManyToMany命名“category_id”?