我正在尝试实现最喜欢的功能,以便用户可以选择喜欢的商店。我目前正在引用视频https://www.youtube.com/watch?v=pkPRtQf6oQ8&t=542s并坚持开头。
当我尝试移动到网址https://www.fake-domain.com/my-domain/like
时,它会抛出错误消息No Store matches the given query.
所以,我猜self.kwargs.get("domainKey")
此代码段似乎抛出了错误,但我不知道知道为什么。
我不确定我的代码是否足够,所以请让我知道我需要展示更多代码。
models.py
class Store(models.Model):
...
domainKey = models.CharField(max_length=100)
likes = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
...
urls.py
url(r'^(?P<store_domainKey>.*)/$', views.detail, name='detail'),
url(r'^(?P<store_domainKey>.*)/like/$', views.StoreLikeRedirect.as_view(), name='like'),
views.py
class StoreLikeRedirect(RedirectView):
def get_redirect_url(self, *args, **kwargs):
store_domainKey = self.kwargs.get("domainKey")
print(store_domainKey)
obj = get_object_or_404(Store, pk='store_domainKey')
return obj.get_absolute_url()
-------------------------------- EDIT ----------- -------------------
根据反馈修改了代码,但仍无效。 当我输入网址时,终端会说出以下内容:
None <-- this is shown by print(store_domainKey) in views.py
Not Found: /down-east/like/
由于views.py中的print函数打印None
,我认为行store_domainKey = self.kwargs.get("domainKey")
上有问题。部分self.kwargs.get()
似乎不起作用。在帖子顶部的示例视频中,该人使用SlugField()
,但我使用CharField()
作为domainKey
。使用self.kwargs.get()
可能是个问题吗?
views.py
class StoreLikeRedirect(RedirectView):
def get_redirect_url(self, *args, **kwargs):
store_domainKey = self.kwargs.get("domainKey")
print(store_domainKey)
obj = get_object_or_404(Store, domainKey=store_domainKey)
return obj.get_absolute_url()
urls.py
url(r'^(?P<store_domainKey>.*)/like/$', views.StoreLikeRedirect.as_view(), name='like'),
url(r'^(?P<store_domainKey>.*)/$', views.detail, name='detail'),
models.py
class Store(models.Model):
...
domainKey = models.CharField(max_length=100)
likes = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
...
def get_absolute_url(self):
return reverse('boutique:detail', kwargs={"domainKey":self.domainKey})
----------------------------第二次更新-------------- ---------------
所以,现在self.kwargs.get("domainKey")
非常好地返回域密钥!
但是
NoReverseMatch at /down-east/like/
Reverse for 'detail' with arguments '()' and keyword arguments '{'domainKey': 'down-east'}' not found. 1 pattern(s) tried: ['(?P<store_domainKey>.*)/$']
答案 0 :(得分:1)
在您的视图中,您使用的是字符串而不是您创建的变量。您可能需要在字段domainKey
而非pk
上进行过滤。
尝试更改
obj = get_object_or_404(Store, pk='store_domainKey')
到
obj = get_object_or_404(Store, domainKey=store_domainKey)