这是我做的方式:
{{ formset.management_form }}
<table>
{% for form in formset.forms %}
{{ form }}
{% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>
Run Code Online (Sandbox Code Playgroud)
这是JS:
var form_count = {{formset.total_form_count}};
$('#add_form').click(function() {
form_count++;
var form = '{{formset.empty_form|escapejs}}'.replace(/__prefix__/g, form_count);
$('#forms').append(form)
$('#id_form-TOTAL_FORMS').val(form_count);
});
Run Code Online (Sandbox Code Playgroud)
特别困扰我的是我必须自己编写escapejs模板标签.它只是删除所有换行符并转义任何单引号,这样它就不会弄乱我的字符串.但Django制造商到底希望我们在这种情况下做些什么呢?为什么他们有这个TOTAL_FORMS隐藏的领域,当他们刚刚使用了一个数组<input name="my_form_field[0]" />然后计算它的长度?
我正在尝试为库存系统构建一个页面,允许用户更新收到的项目数量.
我想显示所有产品的表格,让用户输入收到的数量,我将发布并迭代以更新数据库.
这是我的观点:
def new_shipment(request):
list_of_active_products = Product.objects.filter(status=1)
ShipmentFormSet = formset_factory(ShipmentForm, extra=0)
formset = ShipmentFormSet(initial=list_of_active_products)
return render_to_response('inventory/new_shipment.html', {'formset': formset})
Run Code Online (Sandbox Code Playgroud)
这是我的表格模型:
class ShipmentForm(forms.Form):
sku = forms.IntegerField()
product_name = forms.CharField(max_length=100)
quantity = forms.IntegerField()
Run Code Online (Sandbox Code Playgroud)
这是表单模板:
<form method="post" action="">
<table>
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
渲染时捕获AttributeError:'Product'对象没有属性'get'
任何人都可以帮我解决这个问题吗?
我对Django很新,所以这可能是一个简单的问题.我有2个modelForms,其中有一个ForeignKey到另一个.我的主要目标是保存指标与疾病(FK)的链接,这样对于特定疾病,您可以有多个指标.
使用下面的代码,当我点击"管理框架数据丢失或被篡改"提交时,我收到错误.另外,views.py中的代码似乎没有在返回HttpResponseRedirect的第3个'if'语句中进行验证.但是,当我检查我的数据库时,表单中的值已被写入.有关错误原因的任何想法?以及如何解决它?
我的代码如下:
models.py
#Table for Disease
class Disease(models.Model):
disease = models.CharField(max_length=300)
#Tables for Indicators
class Indicator(models.Model):
relevantdisease = models.ForeignKey(Disease)
indicator = models.CharField(max_length=300)
Run Code Online (Sandbox Code Playgroud)
forms.py
class DiseaseForm(forms.ModelForm):
class Meta:
model = Disease
class IndicatorForm(forms.ModelForm):
class Meta:
model = Indicator
DiseaseFormSet = inlineformset_factory(Disease,
Indicator,
can_delete=False,
form=DiseaseForm)
Run Code Online (Sandbox Code Playgroud)
views.py
def drui(request):
if request.method == "POST":
indicatorForm = IndicatorForm(request.POST)
if indicatorForm.is_valid():
new_indicator = indicatorForm.save()
diseaseInlineFormSet = DiseaseFormSet(request.POST, request.FILES, instance=new_indicator)
if diseaseInlineFormSet.is_valid():
diseaseInlineFormset.save()
return HttpResponseRedirect('some_url.html')
else:
indicatorForm = IndicatorForm()
diseaseInlineFormSet = DiseaseFormSet()
return render_to_response("drui.html", {'indicatorForm': indicatorForm, …Run Code Online (Sandbox Code Playgroud) 我有一个模型formset,我想使用Django的Paginator一次显示10个表单,但它不能像paginator = Paginator(formset, 10).如果有办法,这样做的正确方法是什么?
我想立刻渲染一个表单和一个formset.formset工作正常(我认为),但表单没有验证(好像没有发布数据)
我试过玩按钮,但它的主要提交功能来自js.
这些表单都是独立工作的,但是在提交给togetehr时却没有,所以看起来这里的问题就是代码:
views.py
from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect
from forms import LessonForm, AddMaterialForm
from models import Lesson, SUBJECT_OPTIONS, Materials, MATERIAL_TYPES
from django.forms.formsets import formset_factory
def Create_Lesson(request):
AddMaterials=formset_factory(AddMaterialForm, extra=9)
if request.method == "POST": # If the form has been submitted...
lesson = LessonForm(request.POST, prefix="lesson") # A form bound to the POST data
formset = AddMaterials(request.POST, request.FILES) # A form bound to the POST data
if lesson.is_valid() and formset.is_valid(): # All validation rules pass
lesson = lesson.save(commit=False) …Run Code Online (Sandbox Code Playgroud) 我实现了一个自定义的clean方法来验证我的formset.我知道有错误,因为我可以将它们打印到控制台,但这些non_form_errors()永远不会在我的模板中呈现.我该如何渲染它们?
template.html:
<form action="{% url 'databank:register' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-md-10 col-md-offset-1">
{{ dataset_form.media }}
{% crispy dataset_form %}
<div class="authorFormset">
{% for form in formset %}
{% crispy form helper %}
{% endfor %}
</div>
{% crispy terms_form %}
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<input type="submit" class="btn btn-lg btn-success" value="Submit">
</div>
</div>
</div>
{{ formset.management_form }}
Run Code Online (Sandbox Code Playgroud)
forms.py:
class BaseAuthorFormset(BaseFormSet):
def clean(self):
if any(self.errors):
return
roles …Run Code Online (Sandbox Code Playgroud) 我想在django中保存一个formset.为此,我有我的模型和自定义表单.然后我这样创建我的formset:
QuoteFormSet = formset_factory(QuoteForm, extra=2)
formset = QuoteFormset(request.POST)
Run Code Online (Sandbox Code Playgroud)
但是当我做formset.save()时,我得到了 AttributeError: 'QuoteFormFormSet' object has no attribute 'save'
我的模特:
class Quote(models.Model):
country = models.CharField(max_length=2,)
street = models.CharField(max_length=100,)
Run Code Online (Sandbox Code Playgroud)
我的表格:
class QuoteForm(forms.ModelForm):
class Meta:
model = Quote
country = forms.ChoiceField(choices=COUNTRIES, required=False)
street = forms.CharField(max_length=100, required=False)
Run Code Online (Sandbox Code Playgroud) 这应该是一个相当容易的,但我真的很难自己弄清楚。
我正在做一个房地产应用程序,我需要我的用户能够上传他们的房屋图片。每个图像都与一个房子相关,每个房子都与一个用户相关。
它的工作方式是,但是如果用户使用我的表单集提交一个空表单,整个事情就会中断,因为它向用户和房屋注册了一个不存在的图像。我怎样才能防止这种情况?
这是我的观点:
def photos_formset(request, *args, **kwargs):
pk = kwargs['pk']
ImovelPhotosModelFormset = modelformset_factory(ImovelPhotos, form=ImovelPhotosForm)
formset = ImovelPhotosModelFormset(
request.POST or None, request.FILES or None,
queryset = Imovel.objects.get(pk=pk).imovelphotos_set.all(),
)
if formset.is_valid():
for form in formset:
if not request.FILES:
break
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.imovel = Imovel.objects.get(pk=pk)
obj.save()
return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk))
context = {
"formset": formset,
}
return render(request, "imovel_photos.html", context)
Run Code Online (Sandbox Code Playgroud)
看起来更像是潜在答案的事情是这样的,但它不起作用,如果我这样做,什么也不会发生:
if form.is_valid() and not form.empty_permitted:
Run Code Online (Sandbox Code Playgroud) formsets ×8
django ×7
django-forms ×3
python ×2
django-views ×1
forms ×1
html ×1
javascript ×1
paginator ×1