问题描述
我正在尝试创建一个股票博客页面,现在在该项目中,我遇到了关于url的问题,因为我想做的是针对每个股票名称中创建的每个帖子,在该页面上显示该帖子,我的解释可能会有些混乱,但这是代码和错误,您可以看到。
Traceback (most recent call last):
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\core\handlers\exception.py",line 34,in inner
response = get_response(request)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\core\handlers\base.py",line 115,in _get_response
response = self.process_exception_by_middleware(e,request)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\core\handlers\base.py",line 113,in _get_response
response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "C:\Users\snin2\Desktop\basura\lapagina\app1\views.py",line 59,in StockView
stock_posts = Post.objects.filter(stock=sym.lower())
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\manager.py",line 82,in manager_method
return getattr(self.get_queryset(),name)(*args,**kwargs)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\query.py",line 904,in filter
return self._filter_or_exclude(False,*args,line 923,in _filter_or_exclude
clone.query.add_q(Q(*args,**kwargs))
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1350,in add_q
clause,_ = self._add_q(q_object,self.used_aliases)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1377,in _add_q
child_clause,needed_inner = self.build_filter(
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1311,in build_filter
condition = self.build_lookup(lookups,col,value)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\sql\query.py",line 1165,in build_lookup
lookup = lookup_class(lhs,rhs)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\lookups.py",line 22,in __init__
self.rhs = self.get_prep_lookup()
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\fields\related_lookups.py",in get_prep_lookup
self.rhs = target_field.get_prep_value(self.rhs)
File "C:\Users\snin2\anaconda3\envs\MyDjangoEnv\lib\site-packages\django\db\models\fields\__init__.py",line 1774,in get_prep_value
raise e.__class__(
ValueError: Field 'id' expected a number but got 'aapl'.
from django.urls import path
from app1 import views
from .views import PostView,ArticleDetailView,AddPostView,UpdatePostView,DeletePostView,AddCategoryView,CategoryView,LikeView,MyPostsView,AddCommentView,UpdateCommentView,DeleteCommentView
app_name = 'app1'
urlpatterns = [
path('stock/<str:sym>/',views.StockView,name = 'stock'),]
views.py
def StockView(request,sym):
stock_posts = Post.objects.filter(stock=sym.lower())
return render(request,'app1/stockview.html',{'stock':stock_posts})
models.py
class StockNames(models.Model):
name = models.CharField(max_length=255)
symbol = models.CharField(max_length=255)
def __str__(self):
return self.symbol
class Post(models.Model):
title = models.CharField(max_length= 255)
header_image = models.ImageField(null = True,blank = True,upload_to = 'images/')
author = models.ForeignKey(User,on_delete=models.CASCADE)
body = RichTextField(blank = True,null = True)
#body = models.TextField()
post_date = models.DateField(auto_Now_add=True)
category = models.CharField(max_length=255,default='coding')
snippet = models.CharField(max_length=255)
likes = models.ManyToManyField(User,related_name = 'blog_posts')
stock = models.ForeignKey(StockNames,null=True,on_delete=models.CASCADE)
def total_likes(self):
return self.likes.count()
def __str__(self):
return self.title + ' | ' + str(self.author)
def get_absolute_url(self):
return reverse('app1:article-detail',args=(self.id,))
解决方法
要用Post
过滤symbol
,您需要跨越
stock_posts = Post.objects.filter(stock__symbol=sym.lower())