javascript - 具有数据库关系的 Django 的 ModelForm 中的 MultichoiceField

标签 javascript python django

这是我在 Stackoverflow 上的第一篇文章,所以请忽略错误。在发布之前,我尝试了十几个解决方案,但都没有用。我在用户模型中有表关系。我需要创建一个 ModelForm,让客户从前端为任何项目选择多个用户。我很难用代码实现它。同样对于另一个领域,我需要将选择限制为一个用户。以下是代码。

模型:

class Project(models.Model):
   project_name = models.CharField(max_length=100)
   assigned_to = models.ManyToManyField(User)
   project_url = models.URLField()

def __init__(self):
    return str(self.project_name)

表单。

class ProjectForm(forms.ModelForm)
     class Meta:
       fields = ['project_name', 'assigned_to ', 'project_url']

查看:

def projects(request):
   template = 'projects/projects.html'
   if request.method == 'POST':
       form = ProjectForm(request.POST)
       if form.is_valid():
         form.save()
   else:
     form = ProjectForm()
   return render(request, template, {'form': form})

HTML:

<form action='' method='post'>
 {% csrf_token %}
 {{ form }}
 <button type='submit' class='btn btn-primary'>Submit</button>
 </form>

非常感谢一些帮助。

最佳答案

表单.py:

from django import forms
from .models import Project
class ProjectForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        assigned_users = kwargs.pop('assigned_to', [])
        super(ProjectForm, self).__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs = {"class": "form-control"}
        self.fields['project_name'].required = True
        self.fields['project_url'].required = True

        if assigned_users:
            self.fields['assigned_to'].queryset = assigned_users
        self.fields['assigned_to'].required = True

        self.fields['project_name'].widget.attrs.update({
            'placeholder': 'Project Name'})
        self.fields['project_url'].widget.attrs.update({
            'placeholder': 'Project URL'})
    class Meta:
        model = Project
        fields = ('project_name', 'project_url', 'assigned_to')

View .py

def create_project(request):
    template_name = "create.html"
    users = []

    form = ProjectForm(assigned_to=users)

    if request.method == 'POST':
        form = ProjectForm(request.POST, request.FILES, assigned_to=users)
        if form.is_valid():
            proj_obj = form.save(commit=False)
            proj_obj.created_by = request.user
            proj_obj.save()

            if request.POST.getlist('assigned_to', []):
                proj_obj.assigned_to.add(*request.POST.getlist('assigned_to'))
                assigned_to_list = request.POST.getlist('assigned_to')
            success_url = reverse('projects:list')
            if request.POST.get("savenewform"):
                success_url = reverse("leads:add_lead")
            return JsonResponse({'error': False, 'success_url': success_url})
        return JsonResponse({'error': True, 'errors': form.errors})
    context = {}
    context["proj_form"] = form
    context["users"] = users

    context["assignedto_list"] = [
        int(i) for i in request.POST.getlist('assigned_to', []) if i]

    return render(request, template_name, context)

创建.html:

<div class="form-control">
    {{ proj_form.project_name }}
    {{ proj_form.assigned_to }}
    {{ proj_form.project_url }}

</div>

关于javascript - 具有数据库关系的 Django 的 ModelForm 中的 MultichoiceField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57294379/

相关文章:

javascript - onBlur 事件不允许链接点击注册

javascript - 如何在 asp.net 中单击按钮时使用 Javascript 隐藏 GridView 列?

javascript - Angularjs ng-repeat 并不总是在 $last 上触发

python - 带混合小数的列

Python Dictionary For Loop - 针对不同列表测试键

python - 覆盖在使用 python 3.8 但不是 3.7 的 Windows 上运行非常缓慢

python - 如何在 Django 中的同一个应用程序中使用不同的数据库?

python - 现在可以完全删除 python 2.7 吗?

javascript - 单击弹出元素外部时关闭 bPopup

javascript - 受 pinterest 启发的仪表板布局