当前位置: 首页 > 面试题库 >

具有内联模型形式或表单集的基于django的类的视图

百里沛
2023-03-14
问题内容

我有以下型号:

class Bill(models.Model):
    date = models.DateTimeField(_("Date of bill"),null=True,blank=True)

class Item(models.Model):
    name = models.CharField(_("Name"),max_length=100)
    price = models.FloatField(_("Price"))
    quantity = models.IntegerField(_("Quantity"))
    bill = models.ForeignKey("Bill",verbose_name=_("Bill"),
                             related_name="billitem")

我知道这是可能的:

from django.forms.models import inlineformset_factory
inlineformset_factory(Bill, Item)

然后通过标准视图进行处理。

现在我在想,是否有一种方法可以使用基于类的视图(而不是用于管理界面)来实现相同的目的(意思是:使用内联代码来添加/编辑属于账单的项目)。


问题答案:

关键点是:

产生FormSet内小号forms.py使用inlineformset_factory

BookImageFormSet = inlineformset_factory(BookForm, BookImage, extra=2)
BookPageFormSet = inlineformset_factory(BookForm, BookPage, extra=5)

FormSet在的CreateView类中返回views.py

def get_context_data(self, **kwargs):
    context = super(BookCreateView, self).get_context_data(**kwargs)
    if self.request.POST:
        context['bookimage_form'] = BookImageFormSet(self.request.POST)
        context['bookpage_form'] = BookPageFormSet(self.request.POST)
    else:
        context['bookimage_form'] = BookImageFormSet()
        context['bookpage_form'] = BookPageFormSet()
    return context

用于form_valid保存表单和表单集:

 def form_valid(self, form):
     context = self.get_context_data()
     bookimage_form = context['bookimage_formset']
     bookpage_form = context['bookpage_formset']
     if bookimage_form.is_valid() and bookpage_form.is_valid():
         self.object = form.save()
         bookimage_form.instance = self.object
         bookimage_form.save()
         bookpage_form.instance = self.object
         bookpage_form.save()
         return HttpResponseRedirect('thanks/')
     else:
         return self.render_to_response(self.get_context_data(form=form))


 类似资料:
  • 问题内容: 主视图是一个简单的分页ListView,我想向其中添加搜索表单。 我认为这样可以解决问题: 但是显然我错了..我在官方文档中找不到该怎么做的方法。 建议? 问题答案: 这些答案对引导我朝正确的方向大有帮助。谢谢大家 对于我的实现,我需要一个窗体视图,该窗体视图同时在get和post上返回ListView。我不喜欢重复get函数的内容,但需要进行一些更改。现在,self.form也可以从

  • 问题内容: 我试图实现一个显示表集的选择。如果是第一次请求该站点,则应显示数据集。我希望POST提交,但是GET也可以。 这是一个很容易处理的问题,但是对于基于类的视图,我很难理解。 我的问题是,由于对基于分类的视图的了解有限,导致出现各种错误。我已经阅读了各种文档,并且了解了直接查询请求的视图,但是一旦我想向查询语句中添加表单,就会遇到不同的错误。对于以下代码,我收到了。 根据表单条目(否则选择

  • 问题内容: 如果我有两种形式: 并想使用基于类的视图,并将两种形式都发送到模板,那有可能吗? 看来FormView一次只能接受一种形式。尽管在基于函数的视图中,我可以轻松地将两个表单发送到模板,然后在request.POST中检索这两个表单的内容。 这是使用基于类的视图(通用视图)的限制吗? 问题答案: 默认情况下,基于类的视图每个视图仅支持一个表单。但是还有其他方法可以满足您的需求。但是同样,这

  • 问题内容: 是否有可能使用内联样式的伪类? 例: 我知道上述HTML不能正常运行,但是有类似的东西吗? 附言:我知道我应该使用外部样式表,并且可以。我只是好奇是否可以使用内联样式来完成。 问题答案: 不,这是不可能的。在使用CSS的文档中,内联属性只能包含属性声明。样式表中每个规则集中出现的同一组语句。根据样式属性规范: style属性的值必须匹配CSS 声明块(不包括定括号)的内容的语法,其声明

  • 问题内容: 我想在管理员更改表单中强制使用整个内联表单集。因此,在当前情况下,当我在“发票”表单(在“管理员”中)中单击“保存”时,内联订单表单为空白。我想阻止人们创建没有关联订单的发票。 有人知道这样做的简单方法吗? 在此实例中,模型字段上的常规验证(如)似乎不起作用。 问题答案: 最好的方法是定义一个自定义表单集,使用一种干净的方法来验证至少存在一个发票订单。

  • 在默认(django admin)更改视图中使用自定义ModelForm,如果为仅具有视图权限的用户呈现表单(在django 2.1中新增),则会给我一个空变量。 这是我的代码: 根本原因与中元类的exclude属性有关。无论我对fields/exclude属性写了什么,模型的所有字段总是自动放入exclude列表,并防止被填充。这让我的代码崩溃了。 当然,我可以在self.fields中检查