python - django表单中的过滤字段
问题描述
我正在用 django 建立一个网站。这个网站是基于用户的,每个用户都有一个个人资料模型。现在,我正在构建一个系统,每个用户都可以输入他们的工作经验。我想要它,以便您可以输入一个类别,然后为每个类别填写分数。(例如,如果您为《纽约时报》撰稿,则该类别将是“纽约时报”,然后在它的正下方将是您在项目符号中撰写的文章)。
我可以创建一个类别。我可以创建一个作品,然后将作品分配给一个类别。我遇到的问题是用户可以从工作表单中的其他用户那里选择一个类别。我要做的就是使“类别”字段被过滤,以便用户只能选择他们制作的类别。我已经尝试了几件事,但我不确定过滤此字段的最佳位置在哪里。
模型.py
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
user = models.ForeignKey(User, on_delete=models.DO_NOTHING, null=True, blank=True, related_name='cat')
name = models.CharField(max_length=100)
date = models.DateTimeField(auto_now=False, auto_now_add=False, null=True, blank=True)
def __str__(self):
return self.name
class Work(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=100)
link = models.URLField(max_length=200, blank=True, default='')
date = models.DateTimeField(auto_now=False, auto_now_add=False, null=True, blank=True)
category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, null=True, blank=True)
def __str__(self):
return self.name
视图.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
from django.apps import apps
Post = apps.get_model('blog', 'Post')
Work = apps.get_model('users', 'Work')
class CreateCategory(LoginRequiredMixin, CreateView):
model = Category
fields = ['name', 'date']
success_url = reverse_lazy('resumebuilder')
def form_valid(self, form):
form.instance.user = self.request.user
return super(CreateCategory, self).form_valid(form)
class CreateWork(LoginRequiredMixin, CreateView):
model = Work
fields = ['name', 'link', 'date', 'category']
success_url = reverse_lazy('resumebuilder')
def form_valid(self, form):
form.instance.user = self.request.user
return super(CreateWork, self).form_valid(form)
category_form.html
{% extends "blog/base.html" %}
{% block content %}
<h1> Category Form </h1>
<div>
<form method="POST" action="">
{% csrf_token %}
{{form.as_p}}
<input class="button" type="submit" value="Submit">
</form>
</div>
{% endblock content %}
work_form.html
{% extends "blog/base.html" %}
{% block content %}
<h1> Work Form </h1>
<div>
<form method="POST" action="">
{% csrf_token %}
{{form.as_p}}
<input class="button" type="submit" value="Submit">
</form>
</div>
{% endblock content %}
在 CreateWork 视图中,您可以看到字段 = ['name', 'link', 'date', 'category']。此“类别”字段是需要过滤的字段。我想在那里扔一些东西,比如这条线:
Sorted_categories = Category.objects.filter(user=self.request.user)
我也相信我可以使用 get_context_data 来解决这个问题,但我不确定如何。任何帮助或见解表示赞赏。
解决方案
推荐阅读
- windows - 如何在 Windows WSL 下安装和运行 CentOS 8.2?
- javascript - 使用 DOM 元素单击更改变量的值
- reactjs - 使用jsx错误时反应必须在范围内
- python - 如何在 PyCharm 中运行我的 MATLAB 文件?
- c# - 处理文件“文件位置”时,Msbuild 失败并显示消息:找不到指定的 SDK“Microsoft.NET.Sdk”
- reactjs - 如何将一个函数作为参数传递给另一个通过 React 列表映射的函数?
- jquery - Rails 500 服务器错误,对 form_for 部分的 Ajax 请求
- java - 如何在 Azure Pipelines 中发布多模块 Maven 构建?
- javascript - 如果表格被隐藏,Javascript将表格位置向上移动
- xamarin.forms - ReactiveUI Observable 作为 Prism 中的 Property Helper 等价物?