python - 如何在 django 中按类别过滤
问题描述
我一直在做一个项目,用户可以在其中发帖,但在填写表单时,用户必须回答 2 个问题“你在搜索什么”和“这个帖子来自什么类别”;答案的数量是有限的,根据问题的答案,用户的帖子必须被过滤并发布在“这篇帖子来自哪个类别”的问题的所选类别中,最后必须将用户重定向到所选类别对于“你在寻找什么”这个问题。目前我的代码只能上传帖子,但我不知道过滤过程在 views.py 文件上的样子,因为我是 django 的新手,所以请对这个过滤过程有任何帮助;)
模型.py
CATEGORY_CHOICES = ( #I think this choices can help for the filter
('action', 'action'),
('sports', 'sports'),
)
class Mates(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='usermates', unique=True)
categories = models.CharField(choices=CATEGORY_CHOICES, default="choose...", max_length=10) #I also think this field will help.
req_bio = models.CharField(max_length=400)
req_image = models.ImageField(upload_to='requestmates_pics', null=True, blank=True, default=False)
视图.py
def matesmain(request):
contents = Mates.objects.all()
context = {
'contents': contents,
'form_mates': MatesForm(),
}
print("nice3")
return render(request, 'mates.html', context)
def mates(request):
if request.method == 'POST':
form_mates = MatesForm(request.POST, request.FILES)
if form_mates.is_valid():
instance = form_mates.save(commit=False)
instance.user = request.user
instance.save()
return redirect('mates-main')
print('succesfully uploded')
else:
form_mates = MatesForm()
print('didnt upload')
return redirect('mates-main')
表格.py
class MatesForm(forms.ModelForm):
class Meta:
model = Mates
fields = ('req_bio', 'req_image',)
exclude = ['user']
mates.html
{% for content in contents %}
{% if not content.user == user %}
<div class="mates-grid">
<div class="mates-grid-1">
<div class="mates-item">
<form action="{% url 'mates' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form_mates.as_p}}
</form>
</div>
</div>
</div>
{% elif content.user == user %}
I have my dynamic data output here
{% endif %}
{% endfor %}
有任何问题请在评论中告诉我。
解决方案
如果要过滤模型字段,可以使用.filter()
. 在此处阅读更多相关信息。
在一个视图中,这看起来像这样;
from .models import Mates
def show_mates(request):
# depending on how you want to get the category
category = ''
mates_for_category = Mates.objects.filter(categories=category)
context = {
"mates": mates_for_category
}
return render(request, template_name='mates_for_category.html', context=context)
根据您的问题,我不明白您希望用户如何过滤类别,所以我没有在本示例中指定。
推荐阅读
- node.js - 如何在 mocha 测试套件中的服务器上使用存根函数
- firebase - Nuxt 中的元标记在开发环境中没有被覆盖
- android - 当屏幕关闭时,如何使用 ConnectivityManager.requestNetwork 避免“出现问题”错误?
- python - matplotlib DateFormatter 未使用 yyyy-mm-dd 列显示正确的日期
- r - 将 R markdown 直接渲染到 S3 存储桶
- macos - NSSplitView 导致 NSScrollView 绘图错误?
- python - 在 IDLE 上创建 python 代码,然后在 macOS 终端中使用它
- javascript - React 提取嵌套的 json 对象
- javascript - 在 React Native 中调用不同文件中的列表?
- reactjs - 有没有一种奇特的方法来检测取消选中复选框?