django表单的下拉列表值未显示在视图中

m2xkgtsf  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(129)

我试图在django中创建一个todo应用程序,但我无法获得下拉列表来设置类别填充。
这是当我渲染所有内容时窗体的样子:

我所期望的是,下拉菜单将有选项'个人'和'专业'
这是我的模型:

from django.db import models

class Category(models.Model):
    CATEGORY = (('Personal', 'Personal'), ('Professional', 'Professional'))
    type = models.CharField(max_length=100, null=True, choices=CATEGORY)

    def __str__(self):
        return self.type

class Item(models.Model):
    created_at = models.DateTimeField(auto_now=True)
    task = models.CharField(max_length=200)
    completed = models.BooleanField(default=False)
    category = models.ForeignKey(
        Category, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return (f"{self.created_at}: {self.task}")

这是我尝试使用的形式:

from .models import Item
from django import forms

class AddItem(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['task', 'category']

这是模板:

<div>
  <h1>Your todo task</h1>
  <br>
  <form method="POST" action="{% url 'home' %}">
    {% csrf_token %}
    {{ form }}
    <button type="submit" class="btn btn-secondary">Add a task</button>
  </form>
</div>

感谢您的时间和您提供的任何信息。

zxlwwiss

zxlwwiss1#

这个video(时间戳)回答了我的问题。
最后,我认为对列表使用元组不是正确的调用,特别是这部分:

CATEGORY = (('Personal', 'Personal'), ('Professional', 'Professional'))
    type = models.CharField(max_length=100, null=True, choices=CATEGORY)

最好是它是一个字符字段,然后通过管理面板添加类别。

相关问题