将模型保存到数据库后的空ID

时间:2012-06-12 19:33:20

标签: django

当我将书籍模型添加到数据库,然后查看SQL数据库浏览器中的书籍表时,它将id字段显示为空白。

这很奇怪,因为我在表中有1000个项目。我不知道发生了什么,因为他们中有390人已经填充了他们的ID。其他人的身份空白。

id字段本质上不应该是主键吗?如何在某些情况下填充,而不是其他情况。

注1:过去我手动删除了记录 - 不确定是否存在问题。 注意2:当我print "newbook id:", repr(newbook.id)时,id与SQL数据库浏览器中看到的主键不同。

这就是我所看到的:

enter image description here

相关代码如下:

型号:

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"`

2 个答案:

答案 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”?