如何覆盖 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 以保存多个数据条目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 的 CreateView 提交操作中保存当前登录的用户名?