首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用模型在django表单中生成选择字段

使用模型在django表单中生成选择字段
EN

Stack Overflow用户
提问于 2018-03-17 05:58:36
回答 2查看 458关注 0票数 0

我正在编写Django应用程序并手动构建表单。

代码语言:javascript
运行
复制
<form method="post">
{% csrf_token %}

<input name="name" class="form-control">

<textarea name="description">

<select name="teaching_language">
    <option value="">Value 1</option>
</select>
</form>

我的models.py包含

代码语言:javascript
运行
复制
class TeachingLanguage(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length=250)
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    class META:
        verbose_name_plural = 'teaching_languages'
        db_table = 'languages'

    def __str__(self):
        return self.title

class Course(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=250)
    teaching_language = models.ForeignKey(TeachingLanguage, on_delete=models.CASCADE)
    description = models.TextField(blank=True)

我必须按<option>的列表填写TeachingLanguage

view.py文件包含

代码语言:javascript
运行
复制
class NewCourse(CreateView):
    model = Course
    fields = ['name', 'teaching_language', 'description']

    def get_context_data(self, **kwargs):
        context = super(NewCourse, self).get_context_data(**kwargs)
        teaching_languages = TeachingLanguage.objects.all()
        context['teaching_languages'] = teaching_languages
        return context

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        form.save()

        return super().form_valid(form)

如何在teaching_languages select 字段中呈现以生成下拉列表?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-17 06:57:00

如果您的必须手动执行,而不是让处理它,那么您可以简单地迭代传递给上下文的教学语言:

代码语言:javascript
运行
复制
<select name="teaching_language">
    {% for lang in teaching_languages %}
    <option value="{{ lang.pk }}">{{ lang }}</option>
    {% endfor %}
</select>
票数 0
EN

Stack Overflow用户

发布于 2018-03-17 06:55:01

在模板中尝试以下内容:

代码语言:javascript
运行
复制
<form method="post">
{% csrf_token %}

<input name="name" class="form-control">

<textarea name="description">

{{ form.teaching_languages }}
</form>

这只会从表单中生成teaching_languages字段。单击此处为您提供更多细节。

另外,现在应该删除get_context_data方法,因为form变量会自动传递给模板,而表单会自动提取所有教学语言,因为它们在课程模型中被设置为Foreign。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49332985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档