如何使用 html 文件在 django 中显示 ChoiceField?

Posted

技术标签:

【中文标题】如何使用 html 文件在 django 中显示 ChoiceField?【英文标题】:How to display ChoiceField in django with html file? 【发布时间】:2019-07-26 08:13:45 【问题描述】:

我是 django 的新手,我正在尝试让 ChoiceField 为用户输入工作。 我尝试了两次 html 迭代,但都没有显示任何形式的下拉菜单。

请参阅下面的模型、表单、html 代码

models.py

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):

    CATEGORIES=(
        ('COM', 'Combat'),
        ('CRA', 'Crafting'),
        ('WAR', 'Warfare'),
    )

    post= models.CharField(max_length=500)
    post2= models.CharField(max_length=500)
    category=models.CharField(max_length=3, choices=CATEGORIES)

    user = models.ForeignKey(User, on_delete=models.CASCADE)

forms.py

class HomeForm(forms.ModelForm):
    post = forms.CharField()
    post2 = forms.CharField()

    category = forms.ChoiceField(choices=Post.CATEGORIES)

    class Meta:
        model = Post
        fields = ('post','post2','category',)

html


    <form method="post">

        % csrf_token %
        form.as_p or form


        <input type="submit" value="Submit">


    </form>

views.py

类 HomeView(TemplateView): template_name = '健身/name.html'

def get(self, request):
    form = HomeForm()
    return render(request, self.template_name, 'form':form)

def post(self, request):

    form = HomeForm(request.POST)
    if form.is_valid():
        form.save()
        text = form.cleaned_data['post']
        form = HomeForm()
        return redirect('home:home')

    args = 'form': form, 'text': text
    return render(request, self.template_name, args)

【问题讨论】:

视图在哪里? 是什么显示的? 刚刚添加到问题中 【参考方案1】:

试试这个

 class HomeForm(forms.ModelForm):
    post = forms.CharField()
    post2 = forms.CharField()
    class Meta:
        model = Post
        fields = ('post','post2','category',)
        widgets = 
            'category': forms.Select(choices=Post.CATEGORIES,attrs='class': 'form-control'),
        

【讨论】:

谢谢,但仍然没有显示任何内容,只有 Post 1 和 Post 2 输入字段。然后类别显示为没有任何下拉列表的字符串。然后就是提交按钮。 嘿,检查这是否有效,问题是您使用的 ModelForm 与普通 Form 的工作方式略有不同 感谢您的帮助,但它仍然显示相同的内容。我最初想知道这是否是一个html问题? 查明问题变得越来越困难,不过,我建议您遵循 Django 的最佳实践,很多地方您都偏离了它们。当这种情况发生时,小事情最终可能会导致消磨时间的问题。 marinamele.com/django 和两勺 Django 是它的两个最佳资源。 我真的认为这里的问题是您如何处理 ModelForm,尝试使用基于类的视图重做整个事情,阅读如何编写 ModelForm 视图,使用ModelForm 正在编写基于类的视图。

以上是关于如何使用 html 文件在 django 中显示 ChoiceField?的主要内容,如果未能解决你的问题,请参考以下文章