小编nat*_*tes的帖子

Django modelformset_factory删除标记为删除的模型

当使用modelformset_factory时,如何从数据库中删除在表单中标记为删除的对象?

我像这样创建我的modelformset_factory:

ItemFormset = modelformset_factory(Item, ItemModelForm, extra=1, can_delete=True)
qset = Item.objects.filter(pr=pr)
formset = ItemFormset(queryset=qset)
Run Code Online (Sandbox Code Playgroud)

当formset在POST中返回时,我得到如下数据:

if request.method == "POST":
    formset = ItemFormset(request.POST,queryset=qset)
    if  formset.is_valid():
        marked_for_delete = formset.deleted_forms
        instances = formset.save(commit=False)
        for item in instances:
            item.pr = pr
            item.save()
Run Code Online (Sandbox Code Playgroud)

当formset回来时,我可以获得所有标记为删除的对象,formset.deleted_forms但我无法弄清楚如何实际删除它们.我已经尝试循环遍历每个并单独删除每个但我得到错误:Item object can't be deleted because its id attribute is set to None.

在我所包含的模板中{{form.id}},每个对象都有它在POST中传回的ID.

打电话后instances = formset.save(commit=False)我可以打电话formset.deleted_objects但它只是一个空列表:[]

任何人都可以看到我做错了会使对象无法从数据库中删除吗?

django django-forms

7
推荐指数
2
解决办法
6239
查看次数

将ActiveRecord与DelegateClass一起使用

使用rails 3.2.8我有一个带有几个属性的模型设置

class MyModel < ActiveRecord::Base
  attr_accessible :foo, :bar
end
Run Code Online (Sandbox Code Playgroud)

我使用上面的另一个类设置了一个委托类

class MyModelPresenter < DelegateClass(MyModel)
  def initialize(month, obj)
    @month = month
    super(obj)
  end

  def self.build(month, attributes = { })
    new(month, MyModel.new).tap do |p|
      p.attributes = attributes
    end
  end

  def attributes=(attributes)
    attributes.each { |k, v| send("#{k}=", v) }
  end
end
Run Code Online (Sandbox Code Playgroud)

当我像这样创建新的MyModelPresenter时:

MyModelPresenter.build(Date.today, {:foo => 1})
Run Code Online (Sandbox Code Playgroud)

我得到以下内容

NoMethodError: undefined method `foo=' for #<MyModel:0x1098f31a8>
    from /Users/me/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/activemodel-3.2.8/lib/active_model/attribute_methods.rb:404:in `method_missing'
    from /Users/me/.rbenv/versions/ree-1.8.7-2011.03/lib/ruby/gems/1.8/gems/activerecord-3.2.8/lib/active_record/attribute_methods.rb:149:in `method_missing'
    from /Users/me/dev/temp/app/presenters/my_model_presenter.rb:23:in `send'
    from /Users/me/dev/temp/app/presenters/my_model_presenter.rb:23:in `attributes='
    from /Users/me/dev/temp/app/presenters/my_model_presenter.rb:23:in `each'
    from /Users/me/dev/temp/app/presenters/my_model_presenter.rb:23:in `attributes='
    from …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails-3.2

5
推荐指数
1
解决办法
609
查看次数

标签 统计

django ×1

django-forms ×1

ruby ×1

ruby-on-rails-3.2 ×1