如何覆盖 createView 以保存多个数据条目

Posted

技术标签:

【中文标题】如何覆盖 createView 以保存多个数据条目【英文标题】:How to override createView to save multiple data entry 【发布时间】:2014-07-21 11:51:01 【问题描述】:

使用 CreateView 类,我想保存多个数据条目。 示例输入:

    项目是“苹果、香蕉、胡萝卜” 位置是“位置 1”

我想像这样将它们保存到数据库中: [苹果,位置 1] [香蕉,位置 1] [胡萝卜,位置 1]

#model.py
class Inventory(models.Model):
    item = models.CharField(max_length=14)
    location = models.CharField(max_length=10)

#forms.py
class InventoryCreateForm(forms.ModelForm):
    item = forms.CharField(widget=forms.Textarea(attrs='rows': 8,                                                      
                                                       'cols': 14))
    class Meta:
        model = Inventory

#views.py
class InventoryCreateView(CreateView):
    model = Inventory
    form_class = InventoryCreateForm

谢谢

【问题讨论】:

为什么要强迫自己使用CreateView?尽可能不要使用它来代替 FBV。只需使用功能视图。此外,在您的情况下,django-taggit 似乎对管理项目很有用。 感谢您的回复,我已经在使用 FBV 进行此实现,并且正在尝试探索 GCBV,这就是我尝试使用 createView 的原因。 【参考方案1】:

您需要覆盖 createview 使用的“form_valid()”方法。

然后你需要读入表单数据

def form_valid(self,form):
    self.object = form.save(commit=False)
    foo = self.object.bar #your data is in the object

然后因为您使用的是文本字段,所以您需要以某种方式拆分传递到表单的数据并循环遍历这些值。理想情况下,您需要一个项目列表 ['apple', 'banana', 'pear'] 然后从列表中取出位置并将其存储到一个变量中,以便以后在 location_variable 上使用。

一旦您拥有所需形式的数据,您就需要实例化 Inventory 模型

from foo.models import Inventory #import at the top of your file  

for item is list:
    inventory = Inventory()
    inventory.item = item
    inventory.location = location_variable
    inventory.save()

我希望这个答案可以在某种程度上对您有所帮助,如果您想了解有关基于类的视图的更多详细信息,请访问ccbv,其中列出了每个视图的所有信息。

否则你可以在 django Form docs 中寻找更合适的形式来使用。

【讨论】:

以上是关于如何覆盖 createView 以保存多个数据条目的主要内容,如果未能解决你的问题,请参考以下文章

XML 停止覆盖/保存多个条目

如何在 CoreData 中保存多个条目?

新的数据条目会覆盖列中所有过去的条目,我该如何更正?

如何在 Django 的 CreateView 提交操作中保存当前登录的用户名?

Django - CreateView 不使用嵌套表单集保存表单

如何在CoreData中保存多个条目?