0
我想弄清楚如何用數據庫中的用戶列表填充下拉選擇表單。提交表單時,我希望將所選用戶添加到任務模型對象的ManyToMany用戶字段中。然而,這樣做的邏輯令我困惑。如何用模型對象列表填充表單,以及如何捕獲views.py文件中提交的對象?如何通過表單將現有用戶添加到模型對象中的ManyToManyField中
我想弄清楚如何用數據庫中的用戶列表填充下拉選擇表單。提交表單時,我希望將所選用戶添加到任務模型對象的ManyToMany用戶字段中。然而,這樣做的邏輯令我困惑。如何用模型對象列表填充表單,以及如何捕獲views.py文件中提交的對象?如何通過表單將現有用戶添加到模型對象中的ManyToManyField中
models.py
class Task(models.Model):
name = models.CharField(max_length=100)
users = models.ManyToManyField(User)
urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns('app.views',
url(r'^task/(?P<task_id>\d+)/$', 'task', name='task'),
url(r'^task/(?P<task_id>\d+)/adduser/$', 'add_user', name='add_user'),
)
views.py
from django import forms
from django.shortcuts import get_object_or_404, redirect, render
from app.models import Task
class AddUserForm(forms.Form):
user = forms.ModelChoiceField(queryset=User.objects.all())
def task(request, task_id):
task = get_object_or_404(Task, pk=task_id)
return render(request, 'task_detail.html',
{'task': task, 'form': AddUserForm()}
def add_user(request, task_id):
task = get_object_or_404(Task, pk=task_id)
if request.method == 'POST':
form = AddUserForm(request.POST)
if form.is_valid():
task.users.add(form.cleaned_data['user'])
return redirect('task', task_id)
task_detail.html:
<form action="{% url 'add_user' task.id %}" method="POST">
{% csrf_token %}
<h1>{{ task.name }}</h1>
<ul>
{% for u in task.users.all %}
<li>{{ u }}</li>
{% endfor %}
</ul>
<p>Add another user</p>
{{ form.as_p }}
<button>Add</button>
</form>