django - 如何在当前模型的获取绝对 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]+)/$']
我怎样才能摆脱错误消息。正确的方法是什么?任何帮助,将不胜感激。
谢谢
解决方案
您应该与模型中的模型具有多对一关系 ( ForeignKey
) ,因为每个帖子都属于某个组,并且一个组可以有多个帖子。Group
GroupPost
所以添加一个ForeignKey
:
class GroupPost(models.Model):
...
group = models.ForeignKey('Group', on_delete=models.CASCADE)
现在,您可以从实例中引用相关Group
id
(或):pk
GroupPost
def get_absolute_url(self):
return reverse('group-post-detail', kwargs={'pk': self.group.pk, 'pk2': self.pk})
# ^^^^^^ Here
假设视图名称是group-post-detail
.
此外,除了将 URL 关键字称为pk
and之外pk2
,您还可以更明确:
def get_absolute_url(self):
return reverse('group-post-detail', kwargs={'group_pk': self.group.pk, 'group_post_pk': self.pk})
推荐阅读
- c++ - 2021 年 9 月 Let's Encrypt 出现“SSL 握手失败”错误
- ionic-framework - @capacitor-community/electron 在构建的包上给出 Unhandled Promise Rejection
- python - PyBox2d:在模拟期间更改多边形的顶点
- node.js - 快速路由更改基本路径
- reactjs - 使用来自上下文提供者的函数反应 Context Api
- sql - 带有 3 个表的类型 ORM
- wcag - WCAG - 是否应将具有动态填充数据的表(行)包含在选项卡顺序中?
- python - 当使用与文档中相同的语法和对象类型时,Panda3D GeomVertex Writer/Rewriter 类型错误的原因是什么?
- google-cloud-endpoints - Google Cloud Endpoints 门户 - 内部服务器错误
- mysql - 由于神秘错误,无法从控制台运行数据透视表 mysql 查询