首页 > 解决方案 > 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 来解决这个问题,但我不确定如何。任何帮助或见解表示赞赏。

标签: pythondjangosqlite

解决方案


推荐阅读