0

我正在开发一个 Comment 应用程序,我希望我的 Commentserializer 显示每个 Comment 实例的确切 URL。我知道我必须使用 Comment 模型的 get_absolute_url 。但我无法将我的视图名称从我的路由器连接到 get_absolute_url。

这是我的模型:

class Comment(models.Model):
content = models.TextField(max_length=150)
author = models.ForeignKey(
    User,
    on_delete = models.CASCADE
)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField(blank=True)
content_object = GenericForeignKey('content_type', 'object_id')
parent = models.ForeignKey(
    "self",
    on_delete = models.CASCADE,
    blank=True,
    null=True
)
datestamp = models.DateTimeField(auto_now_add=True)
objects = CommentManager()

def __str__(self):
    return str(self.content[:30])

def save(self):
    self.object_id = self.parent.id
    super(Comment, self).save()

def children(self):
    return Comment.objects.filter(parent=self)

def get_absolute_url(self):
    return reverse("comments-details", args=[str(self.id)])

@property
def is_parent(self):
    if self.parent is None:
        return False
    return True

这是我的路由器:

router = router = routers.SimpleRouter()
router.register('api/comments', CommentViewSet)
urlpatterns = router.urls

如您所见,我正在尝试使用“comment-details”作为视图名称。最终目标是显示这样的 JSON:

{ url : 'blabla/comments/{pk}/details }
4

1 回答 1

1

好的,这很容易修复。只需使用 HyperlinkedModelSerializer 并将“url”添加到您的字段中,如下所示:

class CommentSerializer(serializers.HyperlinkedModelSerializer):

class Meta:
    model = Comment
    fields = [
        "url",
        "datestamp",
        "content",
        "is_parent",
        "object_id",
        "children"
    ]
于 2019-09-10T08:57:32.567 回答