如何通过模板在django模型选择中添加选项

时间:2016-06-16 19:42:12

标签: python django django-models django-templates

我正在学习Django,我需要允许该应用的用户通过模板向item_name字段添加更多选项,但我不知道如何实现这一点。谢谢您的帮助。

这是我的模特

class ItStore(models.Model):
    type_choice = (
            ('Printer Catridge', 'Printer Catridge'),
            ('UPS', 'UPS'),
            ('UPS Battery', 'UPS Battery'),
            ('Mouse', 'Mouse'),
            ('Keyboard', 'Keyboard'),
        )
    item_name = models.CharField(max_length='100', blank=True, null=False, choices=type_choice)
    quantity = models.IntegerField(default='', blank=True, null=False)

这是我的观点

def itstore_create(request):
    form = ItStoreCreateForm(request.POST or None)
    submit = "Create IT Store Items"
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        message = instance.item_name + " Successfully Created"
        messages.success(request, message)
        return redirect("items:itstore_list")
    context = {
        "form": form,
        "title": "CREATE ITEM", 
    }
    return render(request, "store_form.html", context)

这是我的表单

class ItStoreCreateForm(forms.ModelForm):
    class Meta:
        model = ItStore
        fields = ['item_name', 'quantity']

1 个答案:

答案 0 :(得分:1)

您无法在模型上定义choices=。但是,在模型之外定义默认选项列表。

my_choices = (
    "foo",
    "bar",
    "pop",
)
class MyModel(models.Model):
    my_field = models.CharField(max_length=100)

然后在您的视图中,您想要导入该元组并将其传递给您的模板:

from my_app.models import my_choices

def my_view(request, *a, **kw):
    # view logic
    return render(request, "path/to/my/template", choices=my_choices)

然后在您的模板中,您可以选择一个包含默认选项和字符串值的框。并且还有一个可选的input type=text,如果已填充,将保存到该字段。

类似的东西:

<select name="my_field">
<option value="" selected="selected">-----</option>
{% for choice in choices %}
    <option value="{{ choice }}">{{ choice }}</option>
{% endfor %}
</select>

会给你默认选择。然后添加一个具有相同名称的输入,这将作为一个可选的新选择。

<input type="text" name="my_field"/>

您可以选择编写javascript逻辑,以确保只提交选择框或文本字段。