DetailView 使用两个 ForeignKey kwargs

Posted

技术标签:

【中文标题】DetailView 使用两个 ForeignKey kwargs【英文标题】:DetailView using two ForeignKey kwargs 【发布时间】:2014-07-22 01:04:30 【问题描述】:

我正在尝试通过使用通过 url 传递的两个关键字参数查询表来利用 Django 基于类的通用 DetailView。我尝试覆盖 get_queryset() 和 get_object() 方法均无济于事。我的模型看起来像这样(为简洁起见进行了编辑,但如果缺少重要内容,请告诉我):

# models

class Skill(models.Model):
    skill = models.CharField()

class User(AbstractBaseUser):
    username = models.CharField()

class UserSkills(models.Model):
    skill = models.ForeignKey(Skill)
    user = models.ForeignKey(User, to_field='username')
    value = models.CharField()

我的 DetailView 网址如下所示:

url(
    regex=r"^(?P<username>[a-zA-Z0-9-]1,25)/skills/(?P<skill>[a-zA-Z0-9 -._/]+)/$",
    view=views.UserSkillDetail.as_view(),
    name='userskill_detail',
),

观点:

class UserSkillDetail(DetailView):
    template_name = 'UserSkill_detail.html'
    context_object_name = 'skill'
    model = UserSkills

    def get_object(self, queryset=None):
        get_user = self.kwargs['username']
        get_skill = self.kwargs['skill']
        return get_object_or_404(UserSkills, user__username=get_user, skill__skill=get_skill)

我通过模板调试消息不断收到以下错误:

No UserSkills matches the given query.

虽然我能够通过 shell 成功查询以下内容:

>>> x = UserSkills.objects.get(user__username='user1', skill__skill='skill1')
>>> x
<UserSkills: user1@example.com: skill1>

并已通过记录器和 Django 调试工具栏验证了关键字参数被正确捕获('user1'、'skill1')。任何帮助将不胜感激!

【问题讨论】:

您能在return 行之前打印出get_userget_skill 的值,看看它们是什么? 问题已解决:我上次的迁移未能调用数据迁移,因为它出现故障。我重新配置了迁移顺序,一切正常。感谢您的快速回复! 考虑回答您自己的问题并接受答案 - 这将有助于其他人遇到类似问题。 【参考方案1】:

我的迁移顺序存在问题(调用顺序不正确)。我重新配置了迁移,一切正常。

【讨论】:

以上是关于DetailView 使用两个 ForeignKey kwargs的主要内容,如果未能解决你的问题,请参考以下文章

Django:将其转换为 DetailView - 使用来自 URL 的两个参数的视图函数

Django - 使用 DetailView 创建视图

CollectionView CollectionCell 转至 DetailView

基于对象状态的从 UITableView 到 DetailView 的条件 Segue

添加子视图不起作用?

Django 通用视图:何时使用 ListView 与 DetailView