Python Django CreateView多对象插入

Python Django CreateView多对象插入,python,django,django-views,Python,Django,Django Views,我不知道该叫什么名字, 但这里我有一个例子,如果提交表单,它将从其他模型中查找数据,并插入每个匹配的数据 现在这里是我的代码 这里是我的models.py class Foo(models.Model): name = models.CharField() value = models.DecimalField() class Bar(models.Model): name = models.CharField() date = models.DateField

我不知道该叫什么名字, 但这里我有一个例子,如果提交表单,它将从其他模型中查找数据,并插入每个匹配的数据

现在这里是我的代码

这里是我的
models.py

class Foo(models.Model):
    name = models.CharField()
    value = models.DecimalField()

class Bar(models.Model):
    name = models.CharField()
    date = models.DateField()
    foo = models.ForeignKey(Foo, related_name='foo')
class Foo(CreateView):
    fields = ('name', 'value')
    model = models.Foo

    def form_valid(self, form):
        self.object = form.save(commit=False)
        for i in range(30):
            self.object.bar.foo.append(self.object.id)


        return super(ModelFormMixin, self).form_valid(form)
这里是我的
视图.py

class Foo(models.Model):
    name = models.CharField()
    value = models.DecimalField()

class Bar(models.Model):
    name = models.CharField()
    date = models.DateField()
    foo = models.ForeignKey(Foo, related_name='foo')
class Foo(CreateView):
    fields = ('name', 'value')
    model = models.Foo

    def form_valid(self, form):
        self.object = form.save(commit=False)
        for i in range(30):
            self.object.bar.foo.append(self.object.id)


        return super(ModelFormMixin, self).form_valid(form)
Bar
ForeignKey
添加到
Foo
示例如果提交的表单带有
范围(30)
它将查找
Bar
,并为每个数据插入(
append
)Foo
id
。现在我做这个

self.object.bar.foo.append(self.object.id)
但错误说明
“foo”对象没有属性“bar”


如何从
Foo(CreateView)
Bar
插入
append
多个数据?…

首先,
append
list
的方法,FK关系绝对不是列表。其次,您在
Bar
模型中使用了
related\u name='foo'
,因此实际上您可以使用
foo.foo
foo
获取
Bar
。我确信这是一个错误。只要一个
Foo
可以有许多
Bar
,您的
相关的\u名称应该是
Bar
,这样您就可以使用
Foo.Bar.all()
。 要创建
条形图
,您应该首先保存
Foo
,因此使用
commit=True

最后一个。在for循环中使用
Bar.objects.create(foo=self.object)
。 您还希望使用
bulk\u create
来优化该循环,这样您就不会对数据库进行30次查询,而只进行一次查询。要实现它,请在循环之前创建一个列表
bar=[]
。比内部循环使用
Bar.append(Bar(foo=self.object)
。这里
append
list
的方法,所以您只需创建一个
Bar
对象的列表,而不将它们保存到数据库中。最后在循环之后使用
Bar.objects.bulk\u创建(Bar)
,将它们实际保存到数据库中


我重读了你的问题,也许我没有抓住重点。你想如何“找到”你的
条形图
?另外,你不能在你的
条形图中添加多个
Foo
,因为它是if FK,意思是单个对象。

谢谢,所以在你的回答中,`另外,你不能在条形图中添加多个Foo,因为它是if FK,意思是singl因此没有办法更新
foo=models.ForeignKey(foo,related_name='foo'))
?…如果我有30条对象,需要更新它。现在还不清楚你想要实现什么。你的30条对象在哪里?你如何从发布的表单中获取它们?如果它们都引用同一个Foo,如果我理解正确,你只需用新数据更新它。那么你根本不需要Bar,只需upd吃了Foo对象