1

我有 3 个模型,一个是 Category(Fields = category_name),另一个是 SubSategory(Fields = category(ForeignKey to Category),sub_category)。另一个模型是 DummyModel。

# Model
class DummyModel(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField()
    category = models.ManyToManyField(Category)
    sub_category = models.ManyToManyField(SubCategory)

这是我的表格

class StartProjectForm(ModelForm):
    class Meta:
        model = StartProject
        fields = (
            'name',
            'email',
            'category',
            'sub_category',
        )

    def __init__(self, *args, **kwargs):
        super(StartProjectForm, self).__init__(*args, **kwargs)

        self.fields["category"].widget = CheckboxSelectMultiple()
        self.fields["category"].queryset = Category.objects.all()

        self.fields["sub_category"].widget = CheckboxSelectMultiple()
        self.fields["sub_category"].queryset = SubCategory.objects.all()

    def save(self, commit=True):
        clean = self.cleaned_data.get
        name = clean('name')
        email = clean('email')
        category = clean('category')
        sub_category = clean('sub_category')

        obj = StartProject()
        obj.name = name
        obj.email = email
        obj.category = category
        obj.sub_category = sub_category
        obj.save()

这是我的看法

#view

class StartProjectView(View):
    template_name = 'start-project.html'

    def get(self, request):
        form = StartProjectForm()
        return render(request, self.template_name, {'form': form})

    def post(self, request):
        form = StartProjectForm(request.POST)
        if form.is_valid():
            form.save()
            form = StartProjectForm()
            return render(request, self.template_name, {'form':form})

        return HttpResponse("<h2>Done</h2>")

这是我的模板

# Template

<form method="post">
        {% csrf_token %}
        <p>name: <input type="text" name="name"></p>
        <p>Email: <input type="text" name="email"></p>
        {% for form in form %}
            <input type="checkbox" name="category">{{ form.category }}
        {% endfor %}
        <br>
        {% for form in form %}
            <input type="checkbox" name="sub_category">{{ form.sub_category }}
        {% endfor %}
        <button type="submit">Start Now</button>
    </form>

我希望模板中的类别和子类别作为复选框项目。我怎么做。?

4

1 回答 1

1

在挖掘了您的需求之后,您正在寻找的是{{ form.FIELD_NAME }}.

改变你的表格{{ form.category }}{{ form.sub_category }}应该可以工作。

考虑到这只会呈现输入本身,而不是标签或其他 DOM 元素。

查看有关“手动渲染字段”的文档以获取更多信息-> https://docs.djangoproject.com/en/2.2/topics/forms/#rendering-fields-manually

于 2019-09-20T08:49:29.437 回答