Django 选择字段

2024-03-02

我正在尝试解决以下问题:

我的网页只能看到版主。 此页面显示的字段(用户注册后):
用户名、名字+姓氏、电子邮件、状态、相关性等。

我需要显示带有此字段的数据库中存储的所有用户信息的表,但其中两个字段有选择,所以我想做出一个选项,版主可以选择另一个选项,单击“更新”按钮后,该字段将更新选定的用户。

我可以显示“状态”和“相关性”字段的所有选择,并且在从下拉列表中选择新选项后,数据库会更新。
我想显示下拉菜单,并且应该选择存储在数据库中的选项。 我尝试了很多选择,我用谷歌搜索了很多时间,也在 StackOverFlow 中搜索答案或正确的方向,但没有找到任何东西。

抱歉我的英语不好,提前感谢您的帮助!

以下是我的代码的一部分:

模型.py:

class Profile(models.Model):
    user = models.OneToOneField(User)

    status = models.IntegerField(choices=((1, _("Not relevant")),
                                        (2, _("Review")),
                                        (3, _("Maybe relevant")),
                                        (4, _("Relevant")),
                                        (5, _("Leading candidate"))),
                                default=1)

    relevance = models.IntegerField(choices=((1, _("Unread")),
                                        (2, _("Read"))),
                                default=1)

forms.py:

class CViewerForm(forms.Form):

    status = forms.ChoiceField(label="",
                                initial='',
                                widget=forms.Select(),
                                required=True)

    relevance = forms.ChoiceField(widget=forms.Select(),
                              required=True)

views.py:

@group_required('Managers')
@render_to('reader/view.html')
def admins_view(request):
    users_list = Profile.objects.select_related('user').all()
    users_dict = dict()

    if request.method and request.method == 'POST':
        form = CViewerForm(request.POST)

    if form.is_valid():
        d = form.cleaned_data
        # get all selected choices
        status_list = request.POST.getlist('status')
        relevance_list = request.POST.getlist('relevance')
        # get all usernames viewed on page
        users_list = request.POST.getlist('username')

        # create dict from all those lists
        users_dict = zip([user for user in users_list], [status for status in status_list], [rel for rel in relevance_list])
        # run through dict and do bulk update
        for user_dict in users_dict:
            Profile.objects.filter(user__username=user_dict[0]).update(status=user_dict[1], relevance=user_dict[2])

        return HttpResponseRedirect(reverse('reader:admins_view'))

else:
    form = CViewerForm()

return {'users_list': users_list,
        'user': request.user,
        'form': form}

模板:

<form class="form-horizontal" action="" method="post" name="update-form" class="well form-inline" id="view_form">
            {% csrf_token %}
            {{ form.non_field_errors }}
            {% for hidden in form.hidden_fields %}
               {{ hidden }}
            {% endfor %}

            {% if user.is_staff %}
                    <div>
                        <table class="table table-striped table-condensed">
                            <thead>
                                <tr>
                                    <th>{% trans 'Username' %} </th>
                                    <th>{% trans 'E-mail' %} </th>
                                    <th>{% trans 'Status' %} </th>
                                    <th>{% trans 'Relevance' %} </th>
                                </tr>
                            </thead>
                            <tbody>
                                {% for user in users_list %}
                                <tr>
                                    <td><input type="text" READONLY name="username" value="{{ user.user.username }}"></td>
                                    <td>{{ user.user.first_name }}</td>
                                    <td>{{ user.user.last_name }}</td>
                                    <td>{{ user.user.email }}</td>
                                    <td>{{ user.get_status_display }}</td>
                                    <td>{{ user.get_relevance_display }}</td>
                                </tr>
                                {% endfor %}
                            </tbody>
                        </table>
                    </div>
                {% endif %}
                <br>
            {% endif %}
            <div class="form-actions">
                <input type="hidden" name="_cmd_personal">
                <input type="submit" class="btn btn-info" value="{% trans 'Update' %}" name="update" class="default">
            </div>
        </form>

下面是一个解决方案:

forms.py (如 @Liarez 所写)。

模板:

<form class="form-horizontal" action="" method="post" name="update-form" class="well form-inline" id="view_form">
{% csrf_token %}
{% if user.is_staff %}
    {% if users_list %}
        <div>
            <table class="table table-striped table-condensed">
                <thead>
                    <tr>
                        <th>{% trans 'Username' %} </th>
                        <th>{% trans 'First name' %} </th>
                        <th>{% trans 'Last name' %} </th>
                        <th>{% trans 'E-mail' %} </th>
                        <th>{% trans 'CV Status' %} </th>
                        <th>{% trans 'CV Relevance' %} </th>
                    </tr>
                </thead>
                <tbody>
                    {% for user in users_list %}
                    <tr>
                        <td><input type="text" READONLY name="username" value="{{ user.user.username }}"></td>
                        <td>{{ user.user.first_name }}</td>
                        <td>{{ user.user.last_name }}</td>
                        <td>{{ user.user.email }}</td>
                        <td>
                            <select name="cv_status">
                                {% for key, status in status_choices %}
                                    {% ifequal user.get_cv_status_display status %}
                                        <option value="{{ user.cv_status }}" selected>{{ user.get_cv_status_display }}</option>
                                    {% else %}
                                        <option value="{{ key }}">{{ status }}</option>
                                    {% endifequal %}
                                {% endfor %}
                            </select>
                        </td>
                        <td>
                             <select name="cv_signal">
                                {% for key, signal in signal_choices %}
                                    {% ifequal user.get_cv_signal_display signal %}
                                        <option value="{{ user.cv_signal }}" selected>{{ user.get_cv_signal_display }}</option>
                                    {% else %}
                                        <option value="{{ key }}">{{ signal }}</option>
                                    {% endifequal %}
                                {% endfor %}
                            </select>
                        </td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    {% endif %}
    <br>
{% endif %}
<div class="form-actions">
    <input type="submit" class="btn btn-info" value="{% trans 'Update' %}" name="update" class="default">
</div>

首先,我建议您按照@ChrisHuang-Leaver的建议定义一个新文件,其中包含您需要的所有选择,例如choices.py:

STATUS_CHOICES = (
    (1, _("Not relevant")),
    (2, _("Review")),
    (3, _("Maybe relevant")),
    (4, _("Relevant")),
    (5, _("Leading candidate"))
)
RELEVANCE_CHOICES = (
    (1, _("Unread")),
    (2, _("Read"))
)

现在您需要将它们导入到模型上,因此代码很容易理解,如下所示(模型.py):

from myApp.choices import * 

class Profile(models.Model):
    user = models.OneToOneField(User)    
    status = models.IntegerField(choices=STATUS_CHOICES, default=1)   
    relevance = models.IntegerField(choices=RELEVANCE_CHOICES, default=1)

And you 必须导入选择 in the 也有 forms.py:

形式.py:

from myApp.choices import * 

class CViewerForm(forms.Form):

    status = forms.ChoiceField(choices = STATUS_CHOICES, label="", initial='', widget=forms.Select(), required=True)
    relevance = forms.ChoiceField(choices = RELEVANCE_CHOICES, required=True)

无论如何,你的模板有问题,因为你没有使用任何{{form.field}},您生成一个表,但没有输入,只有隐藏字段。

当用户是员工时,您应该生成与您可以管理的用户一样多的输入字段。我认为 django 形式不是适合您情况的最佳解决方案。

我认为使用 html 表单会更好,这样您就可以使用 boucle 生成尽可能多的输入:{% for user in users_list %}您可以使用与用户相关的 ID 生成输入,并且可以在视图中管理所有这些输入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 选择字段 的相关文章

随机推荐

  • 在 Kotlin 中使用线程还是协程更好?

    我正在从应用程序发送邮件 由于邮件发送需要时间并阻塞主线程 因此我正在创建一个新线程并将邮件发送任务移交给新线程 对于发送邮件的大量并发请求 我必须创建大量线程 但创建线程似乎很慢 我的问题是 如果我使用 Kotlin 的协程 它是否能提供
  • 强制惰性实体加载真实实例

    我有一个惰性实体的代理 它是通过加载子实体在会话中创建的 对父实体的后续提取仅返回 NH 代理 我需要实际实例来检查类型 实体已加入子类 我一定错过了一些东西 但我找不到办法做到这一点 Session Refresh proxy 似乎没有帮
  • “单页”JS网站和SEO

    现在有很多很酷的工具可以用来制作强大的 单页 JavaScript 网站 在我看来 正确的做法是让服务器充当 API 仅此而已 并让客户端处理所有 HTML 生成内容 这种 模式 的问题在于缺乏搜索引擎的支持 我可以想到两种解决方案 当用户
  • 有条件地解析 Unity 中的命名实现

    Unity 允许您命名同一接口的不同实现 然后按名称解析它们 var container new UnityContainer register container Register
  • “overflow-y:scroll”属性是否有助于防止 Opera/Safari 中的水平移动?

    我在 CSS 中使用以下内容来强制 Firefox 中的垂直滚动条 body overflow y scroll 这个技术在 Safari 和 Opera 中有效吗 有人说是 有人说不然 CSS 规则overflow y scroll为我工
  • c中如何使用fgets()通过用户输入来控制while循环的执行?

    我正在尝试用 c 编写一个程序 其中我可以通过来自标准输入的用户输入来控制 while 循环的执行 我已经通过 scanf 和 getchar 函数成功完成了它 现在我尝试使用广泛推荐使用的 fgets 函数而不是 scanf 函数来复制此
  • ModuleNotFoundError:没有名为“word2number”的模块错误

    使用命令安装 word2number 时 from word2number import w2n 我在使用 Google Colab 时收到此错误 ModuleNotFoundError 没有名为 word2number 的模块错误 我可以
  • 将 Azure SDK 从 2.4 升级到 2.6 后生成错误

    我刚刚使用项目属性 gt 应用程序下的升级功能将我的 Web 角色项目 和解决方案 从 Azure SDK 2 4 升级到 Azure SDK 2 6 当我构建应用程序时 一切正常 但是当我尝试运行它 并启动 Azure 模拟器等 时 如果
  • 带有 envmap 的 Aframe gltf-model 演示

    在aframe中加载GLTF 模型非常方便 但没有发现包含envmap纹理的案例 我希望官方能提供与三位官方相同的案例 pmremGenerator fromEquirectangular texture 函数用于使gltf模型产生真实的反
  • Amazon S3 - 使用 Java API 批量文件上传?

    我们希望开始使用 S3 来满足我们的一些存储需求 并且我正在寻找一种方法来执行 N 个文件的批量上传 我已经使用 Java API 编写了代码来执行单个文件上传 但是有没有办法提供要传递到 S3 存储桶的文件列表 我确实看过以下问题是否可以
  • 如何防止 css 转换为内联 css

    我正在使用 jquery 在按下按钮时修改 div 元素的 css 我注意到 css 内联到 HTML 中 如何防止样式内联 这些样式标签出现在渲染时 链接您的stylesheet in head
  • Eclipse 对于 g++ 不返回的代码返回错误

    构建简单的代码 示例如下 在 eclipse 上返回错误 而命令行中的 g 不会返回错误 eclipse 和 g 都输出可执行文件 其行为相同 并且结果符合我的期望 当代码不像我所展示的示例那样简单时 这会很痛苦 任何想法表示赞赏 环境 E
  • 如何拆分专有名称?

    我有一份来自 AD 的人员及其 DN 列表 我无法直接访问该 AD 他们的 DN 格式为 DNList CN Bob Dylan OU Users OU Dept OU Agency OU NorthState DC myworld DC
  • 检查列表中是否存在值为 x 的namedtuple

    我想查看列表中是否存在命名元组 类似于 numbers 1 2 3 4 5 if 1 in numbers do stuff 有没有Pythonic 或没有 的方法来做到这一点 就像是 namedtuples namedtuple 1 na
  • NSURL 中的 CGImage 有效,但 UIImage 中无效

    我在对图像应用滤镜时遇到一些问题 使用 CIImage imageWithContentsOfURL 时 以下代码完美运行 NSInteger filterIndex UITapGestureRecognizer sender view t
  • 更改画布中像素的颜色、Tkinter、Python

    有人知道是否可以在不使用 un 对象的情况下更改画布中像素的颜色 因此无需使用类似的东西canvas create oval or canvas create rectangle 除了创建某种 1x1 像素对象之外 没有其他方法可以为像素着
  • 错误:在初始化尝试调用方法“值”之前无法调用滑块上的方法

    我写了类似下面的东西 id为 PLUS I的div的onclick 我收到以下错误 cannot call methods on slider prior to initialization attempted to call method
  • 使用 mpi4py 接收多个发送命令

    如何修改以下代码 改编自http materials jeremybejarano com MPIwithPython pointToPoint html http materials jeremybejarano com MPIwithP
  • matlab中传递和保存匿名函数

    我想要一个函数 例如 一个 fit 函数 返回一个匿名函数 通常存储在struct 我可以保存并稍后使用 然而 路过 func倾向于传递函数指针而不是函数本身 是一个inline函数是做到这一点的唯一方法吗 我想避免inline因为它非常慢
  • Django 选择字段

    我正在尝试解决以下问题 我的网页只能看到版主 此页面显示的字段 用户注册后 用户名 名字 姓氏 电子邮件 状态 相关性等 我需要显示带有此字段的数据库中存储的所有用户信息的表 但其中两个字段有选择 所以我想做出一个选项 版主可以选择另一个选