1

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

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

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

注1:过去我手动删除了记录——不确定这是否是个问题。注意 2:当 Iprint "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"`
4

2 回答 2

2

根据聊天中的讨论:表格id中的列Book不知何故失去了其作为PRIMARY KEY. 把它放回去,你应该很高兴。

于 2012-06-12T20:32:02.577 回答
-1

首先,您可以使用函数get_or_create来测试/保存模型。它返回元组 - 对象,已创建。

如果您可以使用新 id 保存对象:将 object.pk 设置为 None,然后保存。在您的代码中更疯狂地认为。=> Book 是 Books 模型的更好名称。

您对此有何看法:

for cat in category_ids:
    print cat
    newbook.category_id.add(cat)

什么是 category_ids 变量?为什么将 ManyToMany 命名为“category_id”?

于 2012-06-12T19:57:20.787 回答