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_user
和get_skill
的值,看看它们是什么?
问题已解决:我上次的迁移未能调用数据迁移,因为它出现故障。我重新配置了迁移顺序,一切正常。感谢您的快速回复!
考虑回答您自己的问题并接受答案 - 这将有助于其他人遇到类似问题。
【参考方案1】:
我的迁移顺序存在问题(调用顺序不正确)。我重新配置了迁移,一切正常。
【讨论】:
以上是关于DetailView 使用两个 ForeignKey kwargs的主要内容,如果未能解决你的问题,请参考以下文章
Django:将其转换为 DetailView - 使用来自 URL 的两个参数的视图函数
CollectionView CollectionCell 转至 DetailView