我有一个博客,想添加一个post_type变量,该变量将是网页上的下拉列表。
我已将post_type作为Charfield添加到Post模型中。并在模板中设置下拉菜单。 (这可能不是最好的方法)
它在我创建帖子以及编辑帖子时都有效,如果更改下拉值,则会保存新值。我遇到的问题是编辑帖子时,无法在下拉菜单中选择要选择的值。
我认为下拉列表中的值的html标签需要被市场选中,但我不知道该怎么做。如果有人能指出正确的方向,我将非常感谢您的帮助。
答案 0 :(得分:1)
最简单的方法是将选择列表添加到模型中的charfield中。
model.py
class BlogPost(models.Model):
POST_TYPE_CHOICES = (
('cooking', 'Cooking'),
('story','Amazing Stories'),
)
#other fields here
post_type = models.CharField(choices=POST_TYPE_CHOICES, max_length=50)
然后,如果您使用此模型创建ModelForm,则模板中的默认布局将是一个下拉列表。
来自文档:
选择
Field.choices
由以下组成的可迭代对象组成的可迭代对象(例如列表或元组) 恰好有两个项目(例如[(A,B),(A,B)...])可用作选择 这个领域。如果给出选择,则通过模型验证来实施 并且默认的表单小部件将是带有这些选择的选择框 而不是标准文本字段。
编辑了20/02:
您需要在实例内部传递实例(我假设您没有使用基于类的视图)。
所以您应该有这样的东西:
def edit_post(request, post_id):
#try to get the instance of the post you need to edit
post_instance = get_object_or_404(Post, id = post_id)
#get your form and pass it the current Post instance
form = EditPostForm(request.POST or None, instance=post_instance)
#validate your form
if form.is_valid():
#if using ModelForm the database will be saved as well
form.save()
#then render your template with the form
return render(request, "edit_post.html", {'form': form})
然后,您应该在模板中使用{{form.field_name}}表示法,并且可以看到带有下拉菜单的当前值。