gpt4 book ai didi

Django inlineformsetfactory - 它有什么用?

转载 作者:行者123 更新时间:2023-12-05 00:07:39 30 4
gpt4 key购买 nike

对不起,一个新手问题,但...

有人可以解释一下 inlineformset_factory 的用例是什么吗?

我遵循了 Django 文档中的示例:

#Models
class Author(models.Model):
name = models.CharField(max_length=100)

class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)

#View

def jojo(request):

BookFormSet = inlineformset_factory(Author, Book)
author = Author.objects.get(name=u'Mike Royko')
formset = BookFormSet(instance=author)


return render_to_response('jojo.html', {
'formset': formset,
})

#jojo.html
<form action="" method="POST">
<table>

{{ formset }}

</table>
<input type="submit" value="Submit" />
</form>

但它只显示书籍字段。

我的理解是 formset 会显示带有内联作者表单的 Book 表单
像 Django 管理员。最重要的是,我不能轻松地将初始值传递给 formset?

那么如何比使用两个单独的 AuthorForm 和 BookForm 更好呢?

还是我错过了一些明显的东西?

最佳答案

inlineformset_factory 只为嵌套元素提供多个表单,如果您想要主模型的表单,则需要在顶部单独的表单。

这是一个工作 inlineformset_factory 的示例,主表单嵌入在顶部:

View .py

from django.shortcuts import get_object_or_404, render_to_response
from django.forms.models import inlineformset_factory
from django.http import HttpResponseRedirect
from django.template import RequestContext

from App_name.models import * #E.g. Main, Nested, MainForm, etc.

. . .
@login_required
def Some_view(request, main_id=None, redirect_notice=None):
#login stuff . . .
c = {}
c.update(csrf(request))
c.update({'redirect_notice':redirect_notice})#Redirect notice is an optional argument I use to send user certain notifications, unrelated to this inlineformset_factory example, but useful.

#Intialization --- The start of the view specific functions
NestedFormset = inlineformset_factory(Main, Nested, can_delete=False, )
main = None
if main_id :
main = Main.objects.get(id=main_id)#get_object_or_404 is also an option

# Save new/edited Forms
if request.method == 'POST':
main_form = MainForm(request.POST, instance=main, prefix='mains')
formset = NestedFormset(request.POST, request.FILES, instance=main, prefix='nesteds')
if main_form.is_valid() and formset.is_valid():
r = main_form.save(commit=False)
#do stuff, e.g. setting any values excluded in the MainForm
formset.save()
r.save()
return HttpResponseRedirect('/Home_url/')
else:
main_form = MainForm(instance=main, prefix='mains') #initial can be used in the MainForm here like normal.
formset = NestedFormset(instance=main, prefix='nesteds')
c.update({'main_form':main_form, 'formset':formset, 'realm':realm, 'main_id':main_id})
return render_to_response('App_name/Main_nesteds.html', c, context_instance=RequestContext(request))

模板.html
{% if main_form %}
<form action="." method="POST">{% csrf_token %}
{{ formset.management_form }}
<table>
{{main_form.as_table}}
{% for form in formset.forms %}
<table>{{ form }}</table>
{% endfor %}
</table>
<p><input type="submit" name="submit" value="Submit" class="button"></p>
</form>
{% endif %}

关于Django inlineformsetfactory - 它有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913913/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com