如何从外键模型填充 Django 中的下拉列表
how to populate dropdown list in Django from a foreignkey model
我有两个模型。
class ArticleCategory(models.Model):
category = models.CharField(max_length=255,blank=False)
class Article(models.Model):
title = models.CharField(max_length=255,blank=False)
body = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
category = models.ForeignKey(ArticleCategory,default=1)
现在我必须呈现一个模板并保存文章模型的表单。我的文章模型中有一个 foreignKey 字段,因此我无法保存我的文章表单。我想 select 从下拉列表中选择一个类别并将其保存在我的文章模型中。
我应该如何为此编写模板?
我的 views.py 函数是:
def create(request):
if request.POST:
form = ArticleForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/articles/all/')
else:
form = ArticleForm()
args={}
args.update(csrf(request))
args['categories'] = ArticleCategory.objects.all()
args['form'] = form
return render_to_response('create_article.html', args)
我的模板 create_article.html 目前看起来像这样:
<form role="form" action="/articles/create/" method="POST" enctype="multipart/form-data">{% csrf_token %}
<div class="row">
<div class="form-group col-lg-3">
<label></label>
<p>{{form.title}}</p>
</div>
<div class="form-group col-lg-3">
<label>Category</label>
<p>
<select id="id_category">
{% for category in categories %}
<option value="{{ category }}">{{ category.category }}</option>
{% endfor %}
</select>
</p>
</div>
<div class="clearfix"></div>
<div class="form-group col-lg-12">
<label>Body</label>
{{form.body}}
</div>
<div class="form-group col-lg-12">
<button type="submit" class="btn btn-default">Save Article</button>
</div>
</div>
</form>
您不需要手动执行此操作。如果你的 ArticleForm
是 ModelForm
并且不排除 category
字段那么你可以只写 {{ form.category }}
并获得由 django 自动创建的下拉列表。它在引擎盖下使用 ModelChoiceField
。
替换
<select id="id_category">
{% for category in categories %}
<option value="{{ category }}">{{ category.category }}</option>
{% endfor %}
</select>
和
{{ form.category }}
我有两个模型。
class ArticleCategory(models.Model):
category = models.CharField(max_length=255,blank=False)
class Article(models.Model):
title = models.CharField(max_length=255,blank=False)
body = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
category = models.ForeignKey(ArticleCategory,default=1)
现在我必须呈现一个模板并保存文章模型的表单。我的文章模型中有一个 foreignKey 字段,因此我无法保存我的文章表单。我想 select 从下拉列表中选择一个类别并将其保存在我的文章模型中。
我应该如何为此编写模板?
我的 views.py 函数是:
def create(request):
if request.POST:
form = ArticleForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/articles/all/')
else:
form = ArticleForm()
args={}
args.update(csrf(request))
args['categories'] = ArticleCategory.objects.all()
args['form'] = form
return render_to_response('create_article.html', args)
我的模板 create_article.html 目前看起来像这样:
<form role="form" action="/articles/create/" method="POST" enctype="multipart/form-data">{% csrf_token %}
<div class="row">
<div class="form-group col-lg-3">
<label></label>
<p>{{form.title}}</p>
</div>
<div class="form-group col-lg-3">
<label>Category</label>
<p>
<select id="id_category">
{% for category in categories %}
<option value="{{ category }}">{{ category.category }}</option>
{% endfor %}
</select>
</p>
</div>
<div class="clearfix"></div>
<div class="form-group col-lg-12">
<label>Body</label>
{{form.body}}
</div>
<div class="form-group col-lg-12">
<button type="submit" class="btn btn-default">Save Article</button>
</div>
</div>
</form>
您不需要手动执行此操作。如果你的 ArticleForm
是 ModelForm
并且不排除 category
字段那么你可以只写 {{ form.category }}
并获得由 django 自动创建的下拉列表。它在引擎盖下使用 ModelChoiceField
。
替换
<select id="id_category">
{% for category in categories %}
<option value="{{ category }}">{{ category.category }}</option>
{% endfor %}
</select>
和
{{ form.category }}