首页 > 解决方案 > 如何在当前模型的获取绝对 URL django 中获取另一个模型的 pk 值

问题描述

我正在学习django。我对编程很陌生。我有一个模型如下:

class Group(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    group_description = models.TextField()
    created_date = models.DateTimeField(
        default=timezone.now)
    published_date = models.DateTimeField(
        blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        self.save()
        return reverse('group-detail', kwargs={'pk': self.pk})

now I am creating another model which needs the pk value of the above Group model:
class GroupPost(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('group-post-detail', kwargs={'pk': Group.pk, 'pk2': self.pk})

当我只给出 Group.pk 时,给出以下信息是错误的。

未找到关键字参数“{'pk': , 'pk2': 73}' 的“group-post-detail”的反向操作。尝试了 1 种模式:['groups/(?P[0-9]+)/post/(?P[0-9]+)/$']

我怎样才能摆脱错误消息。正确的方法是什么?任何帮助,将不胜感激。

谢谢

标签: django

解决方案


您应该与模型中的模型具有多对一关系 ( ForeignKey) ,因为每个帖子都属于某个组,并且一个组可以有多个帖子。GroupGroupPost

所以添加一个ForeignKey

class GroupPost(models.Model):
    ...
    group = models.ForeignKey('Group', on_delete=models.CASCADE)

现在,您可以从实例中引用相关Group id(或):pkGroupPost

def get_absolute_url(self):
    return reverse('group-post-detail', kwargs={'pk': self.group.pk, 'pk2': self.pk})
    #                                                 ^^^^^^ Here

假设视图名称是group-post-detail.

此外,除了将 URL 关键字称为pkand之外pk2,您还可以更明确:

def get_absolute_url(self):
        return reverse('group-post-detail', kwargs={'group_pk': self.group.pk, 'group_post_pk': self.pk})

推荐阅读