Django的:如何使用的ModelForm动态0-N的可能性?

该Quetion

您好。 我试图找出使用一个表单创建一个父对象,然后创建0-n个子目标的最佳途径。 我假设ModelForms是什么,我需要做的,但我有一个很难理解如何构造模板和视图。 会有人愿意解释如何创建子对象的n个?

这个调查

我读过有关这几个其他文章和帖子:

  • Django模型/的ModelForm - 如何获取动态选择在choiceField?
  • 如何创建使用动态值的ModelForm下拉菜单在Django?
  • http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/
  • 覆盖在Django的ModelForm保存方法

仅举几例。

细节

我有两个型号,像这样:

// models.py

class DataItem(models.Model): name = models.CharField(max_length=255) date_created = models.DateTimeField(auto_now_add=True) date_last_updated = models.DateTimeField(auto_now_add=True) owner = models.ForeignKey(User, blank=False) def __unicode__(self): return self.name class DataItemSet(models.Model): item = models.ForeignKey(DataItem, blank=False) type_ind = models.IntegerField()

我已经创建了两个ModelForms对应:

// forms.py

class CreateDataItemForm(forms.ModelForm): class Meta: model = DataItem exclude = ('owner',) def save(self, user, commit=True): item = super(CreateDataItemForm,self).save(commit=False) item.owner = user if commit: item.save() return item class CreateDataItemSetForm(forms.ModelForm): class Meta: model = DataItemSet exclude = ('item',) def save(self, parent, commit=True): set = super(CreateDataItemSetForm,self).save(commit=False) set.item = parent if commit: set.save() return set

而在我看来,我想有一个表单提交一个新的创造DataItem和1-N DataItemSet ■哪些是由拥有DataItem 。 这里的形式的输出的一个例子:

Django的:如何使用的ModelForm动态0-N的可能性?

和模板:

<form action="." method="post"> {% csrf_token %} <table> {{ create_form.as_table }} </table> <table> <tr> <th>What to track:</th> <td> <select> <option value="1">Number</option> <option value="2">Currency ($)</option> <option value="3">Date</option> <option value="4">Day</option> <option value="5">Time</option> </select> </td> <td> </td> </tr> <tr> <th>What to track:</th> <td> <select> <option value="1">Number</option> <option value="2">Currency ($)</option> <option value="3">Date</option> <option value="4">Day</option> <option value="5">Time</option> </select> </td> <td> <button type="button">+</button> </td> </tr> </table> <p> <button type="submit">Create</button> </p> </form>

最后,认为:

// views.py

@login_required @csrf_protect def create_data_item(request): create_form = CreateDataItemForm() c = {'create_form':create_form} c.update(csrf(request)) if request.method == 'POST': data = request.POST.copy() form = CreateDataItemForm(data, instance=DataItem()) item_sets = [CreateDataItemSetForm(request.POST, prefix=str(x), instance=DataItemSet()) for x in range(0,9)] if form.is_valid(): # create new data item new_item = form.save(request.user) #create new set of stuff to track for item_set in item_sets: new_item_set = item_set.save(new_item) # return to the add entry page return redirect('/add') else: return render_to_response('internal/create_data_item.html',c)

我缺少如何允许从0-N DataItemSets动态提取form 。 我不能用的ModelForm弄明白。

感谢您的帮助!

--------------解决方案-------------

这是什么型号表单集 - 明确,内联表单集 - 是。

分类:Django的 时间:2015-03-15 人气:3
本文关键词: Django的,的ModelForm
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.506 (s). 10 q(s)