在Django中创建“Comment”实例以进行迁移?

0 投票
1 回答
841 浏览
提问于 2025-04-16 19:10

我现在有一堆旧的评论,需要把它们迁移到 django.contrib.comment 里。我的计划是手动创建评论实例,然后像下面这样保存:

# assume some_content is NOT a django Comment instance, but in some proprietary format
# assume the model I'm attaching the comment to is called Blog i.e models.Blog
c = Comment()
c.user = user
c.submit_date = some_comment.comment_date_time
c.comment = some_comment.comment
... 
c.save()

主要的问题是缺少在 django.contrib.comment.model 中找到的 BaseCommentAbstractModel 类里的信息。特别是有三个字段:

BaseCommentAbstractModel(models.Model):
    # Content-object field
    content_type   = models.ForeignKey(ContentType,
        verbose_name=_('content type'),
        related_name="content_type_set_for_%(class)s")
    object_pk      = models.TextField(_('object ID'))
    content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")

我看过文档,尽量去了解源代码,但信息不够详细。我该如何正确地从模型对象(model.Blog)中指定这些字段呢?

也许某个地方有个方法,可以接受模型对象和评论内容来添加评论?

1 个回答

1

来自文档的内容:

  • 首先,你需要把content_type设置为你模型的ContentType实例,也就是你想要添加评论的那个模型:

    content_type = ContentType.objects.get_for_model(Blog)

  • 接着,把object_pk设置为你对象的主键,也就是唯一标识这个对象的那个值:

    object_pk = myBlog_instance.pk

  • content_object会自动指向这两个字段,所以你不需要手动设置它。

撰写回答