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

时间:2014-06-01 02:37:14

标签: python django forms django-views django-generic-views

使用 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

谢谢

1 个答案:

答案 0 :(得分:0)

您需要覆盖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中查找更合适的表单。