gpt4 book ai didi

python - Django 选择字段

转载 作者:IT老高 更新时间:2023-10-28 21:49:37 24 4
gpt4 key购买 nike

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

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

我需要用这个字段显示存储在数据库中的所有用户信息的表格,但是有两个字段有选择,所以我想选择版主可以选择另一个选项,点击“更新”按钮后,这个字段将为选定的用户更新。

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

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

以下是我的部分代码:

models.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"))
)

现在你需要在模型上导入它们,这样代码就很容易理解了(models.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)

必须在 forms.py 中也导入选项:

forms.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}},您生成了一个表,但没有输入,只有 hidden_​​fields。

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

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

关于python - Django 选择字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com