编辑时不显示Django对象

时间:2013-01-28 10:31:27

标签: django

我正在尝试通过表单编辑现有对象,但是每个东西都没有填充当前值。 这个对象确实有一个值,但是当我去编辑时,所有字段中都没有显示任何内容,只显示空白字段。

以下是模型:

class Flow (models.Model):
    title = models.CharField("Title", max_length=200)
    slug = models.SlugField(unique=True)
    description = models.TextField("Description")
    url = models.URLField("URL")
    tags = TaggableManager()
    flow_date = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    author = models.ForeignKey('auth.User', null=True)

    def __unicode__(self):
        return self.title

    @permalink
    def get_absolute_url(self):
        return ('flow.views.details', (), {'slug':self.slug})

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        return super(Flow, self).save(*args, **kwargs)

    class Meta:
        verbose_name = 'Flow'

这是视图

class FlowForm(forms.ModelForm):
    class Meta:
        model = Flow
        exclude = ['flow_date', 'slug']

@login_required
def edit(request, flow_id = None):
    flow = None
    if flow_id is not None:
        flow = get_object_or_404(Flow, pk=flow_id)

    if request.method == 'POST':
        form = FlowForm(request.POST, instance=flow)
        if form.is_valid():
            tags = form.cleaned_data['tags']
            newflow = form.save(commit=False)
            newflow.save()
            for tags in tags:
                newflow.tags.add(tags)
            return HttpResponseRedirect(newflow.get_absolute_url())
    else:
        form = FlowForm(request.POST, instance=flow)
    return render_to_response('flow/flow_edit.html', {'form':form, 'flow':flow,}, context_instance=RequestContext(request))

提前致谢。

更新

谢谢Daniel。

现在我要删除包含django-taggit对象的对象。它使用以下定义,但标签仍显示在基于django-taggit-templatetags的标签云列表中。

@login_required
def delete(request, flow_id):
    flow = Flow.objects.get(pk=flow_id)
    flow.delete()
    return render_to_response('flow/flow_delete.html', {'flow':flow,}, context_instance=RequestContext(request))

如何从表单/数据库中删除选定的django-taggit的对象/计数?

1 个答案:

答案 0 :(得分:0)

当请求不是POST时,您将request.POST作为数据参数传递给else子句中的表单实例化,因此这是一个空字典。即使它是空的,它仍将覆盖实例中的所有字段,因为实例值仅用作默认值,并且在将任何内容作为数据传递时不会显示。将该行更改为:

form = FlowForm(instance=flow)