Django 将变量传递回模板并更新下拉框值

Django 将变量传递回模板并更新下拉框值,django,Django,我有一个博客,想添加一个post_类型变量,它将是网页上的下拉列表 我已经将post_type作为Charfield添加到我的post模型中。并在模板中设置下拉列表。这可能不是最好的方法 它在我创建帖子和编辑帖子时起作用,如果我更改下拉值,新值将被保存。我遇到的问题是,当我编辑一篇文章时,我无法获得要在下拉列表中选择的值 我认为下拉列表中的值的html标记需要被选中,但我不知道如何做到这一点。如果有人能为我指出正确的方向,我将非常感谢您的帮助。最简单的方法是在模型中的charfield中添加选择

我有一个博客,想添加一个post_类型变量,它将是网页上的下拉列表

我已经将post_type作为Charfield添加到我的post模型中。并在模板中设置下拉列表。这可能不是最好的方法

它在我创建帖子和编辑帖子时起作用,如果我更改下拉值,新值将被保存。我遇到的问题是,当我编辑一篇文章时,我无法获得要在下拉列表中选择的值


我认为下拉列表中的值的html标记需要被选中,但我不知道如何做到这一点。如果有人能为我指出正确的方向,我将非常感谢您的帮助。

最简单的方法是在模型中的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)
然后,如果使用此模型创建模型表单,则模板中的默认布局将是dropdownlist

从文档:

选择

字段选择

一个可数,例如,一个列表或元组,由 正好有两个项目,例如[A,B,A,B…]用作 这个领域。如果给出了选择,它们将通过模型验证来实现 默认的表单小部件将是一个包含这些选项的选择框 而不是标准文本字段

2002年2月20日编辑:

您需要在视图中传递实例,我假设您没有使用基于类的视图

所以你应该有这样的东西:

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}}符号,并通过下拉列表查看当前值,没有问题。

您需要向我们展示您在代码中所做的工作。模板、表单和视图的相关部分。如果您使用的是django ModelForm,在编辑实例时使用正确的实例进行初始化,则呈现的字段将自动具有当前值。谢谢,我遵循了示例,在我的模型中使用了post_类型,有3个选项。如果我在模板中使用{{form.as{p}看起来不错,但是我已经在模板中分解了每个表单元素,并使用了{{instance.summary}、{{instance.content}等POST模型的字段。如果我尝试{{instance.post_type}},如果设置了值,我将得到该值,但我不知道如何编写HTML代码以提供下拉列表。我能找到的所有示例都使用{{form.as_p}。非常感谢如果有人能帮忙,谢谢基本上如果你的帖子模型看起来不错,你创建了一个链接到该模型的模型表单。是否希望有一个更新视图,在该视图中可以看到所有字段和值或某个Post实例的某些部分,并可以对其进行编辑?如果是,你可以显示你的视图和模板,因为我认为你找到了实例和表单。感谢你的帮助,Ben,很抱歉回复太慢。我确实混淆了实例和表单。我正在使用表单创建一篇文章,然后编辑一篇文章,这就是实例的来源,因此对于标题,我有一个值发送到instance.Title,我想在创建文章时,该值为空,因为实例没有创建。我尝试在模板中使用{form.post_type}},该模板在创建新帖子时起作用,此时会显示下拉列表并成功保存所选值。现在的问题是,当我编辑文章时,我希望下拉列表中显示所选的值。我已经尝试在我的代码中复制,但是我的文章超过了2000个字符的限制。有没有办法发布大量的代码?你需要编辑你的文章,并尝试只使用代码的相关部分。