我正在模板中手动构建一个formset的片段.如何获取隐藏字段TOTAL_FORMS和INITIAL_FORMS.是否有隐藏的显示小部件,我可以在其中调用它们?
<label>formset title</label>
#formset.TOTAL_FORMS
#formset.INITIAL_FORMS
{% for form in formset.forms %}
{{form.field}}
{{form.id}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud) 我有一个模型组织,有两个字段'id'和'name'.我打算用动态模型formsets填充它.我到目前为止的代码如下.
形式
class OrganizationForm(forms.ModelForm):
class Meta:
model = Organization
fields = ('name',)
OrganizationFormset = modelformset_factory(Organization, form=OrganizationForm, fields=('name', ), extra=1)
Run Code Online (Sandbox Code Playgroud)
意见
class OrganizationCreate(CreateView):
model = Organization
form_class = OrganizationForm
def get_context_data(self, **kwargs):
context = super(OrganizationCreate, self).get_context_data(**kwargs)
context['formset'] = OrganizationFormset()
return context
def post(self, request, *args, **kwargs):
formset = OrganizationFormset(request.POST)
if formset.is_valid():
return self.form_valid(formset)
def form_valid(self, formset):
formset.save()
return HttpResponseRedirect('/')
def form_invalid(self, formset):
return self.render_to_response(self.get_context_data(formset=formset))
class OrganizationUpdate(UpdateView):
model = Organization
form_class = OrganizationForm
template_name_suffix = '_update_form'
def get_context_data(self, **kwargs):
context = super(OrganizationUpdate, …Run Code Online (Sandbox Code Playgroud) 我可以在模型formset中添加字段吗?如果你使用普通的formset而不是模型formset,你似乎可以添加字段(至少它的方式不一样).我不认为我应该使用内联formset ..?
我想让用户编辑他们的photoalbum(django-photologue).到目前为止,我已设法做到这一点:
PhotoFormSet = modelformset_factory(Photo,
exclude=(
'effect',
'caption',
'title_slug',
'crop_from',
'is_public',
'slug',
'tags'
))
context['gallery_form'] = PhotoFormSet(queryset=self.object.gallery.photos.all())
Run Code Online (Sandbox Code Playgroud)
问题是我必须为每张照片添加一个复选框,上面写着"删除这张照片"和一个收音机选择说"将此设置为专辑封面".
提前致谢!
我如何迭代一个formset来获取该表单中的每个表单和FileField?
for file in formset.files:
....
for form in formset.forms:
....
Run Code Online (Sandbox Code Playgroud)
我想在同一个循环中使用上述内容,因为我需要同时使用它们!
Formset is_valid 返回“True,但当 Form Class 只有一个字段时,该字段为空。
我使用“python manage.py shell”制作了这个示例。
如您所见,当“ArticleForm”类只有标题字段时,表单集的is_valid 函数返回“True”。
我看到有人因为这个问题而使用了 has_changed 函数。
但我认为这不是解决这个问题的好方法。
from django import forms
from django.forms.formsets import formset_factory
class ArticleForm(forms.Form):
title = forms.CharField()
ArticleFormSet = formset_factory(ArticleForm)
data = {
'form-TOTAL_FORMS': '2',
'form-INITIAL_FORMS': '0',
'form-MAX_NUM_FORMS': '',
'form-0-title': 'Test',
'form-1-title': '',
}
formset = ArticleFormSet(data)
formset.is_valid()
#True - I think it has to be "False" because the "form-1-title' is empty
formset.errors
#[{}, {}]
class ArticleForm(forms.Form):
title = forms.CharField()
pub_date = forms.DateField()
ArticleFormSet = formset_factory(ArticleForm)
data = { …Run Code Online (Sandbox Code Playgroud) 我有一个模型:
class HospitalDoctor(models.Model):
hospital = models.ForeignKey(Hospital)
full_name = models.CharField(max_length=100, unique=True)
expertization = models.CharField(max_length=50)
nmc_no = models.CharField(max_length=20)
timings = models.ManyToManyField('Timing',related_name='shift_timing')
appointment = models.IntegerField(default=0)
def __unicode__(self):
return self.full_name
class Timing(models.Model):
hospital = models.ForeignKey(Hospital)
doctor = models.ForeignKey(HospitalDoctor)
day = models.CharField(max_length=20)
mng_start = models.IntegerField()
mng_end = models.IntegerField()
eve_start = models.IntegerField()
eve_end = models.IntegerField()
def __unicode__(self):
return self.day
Run Code Online (Sandbox Code Playgroud)
我为此创建了表单:
class HospitalDoctorInfoForm(forms.ModelForm):
class Meta:
model = HospitalDoctor
fields = ('hospital','full_name', 'expertization', 'nmc_no')
class TimingForm(forms.ModelForm):
class Meta:
model = Timing
fields = ('day','mng_start', 'mng_end', 'eve_start', 'eve_end')
Run Code Online (Sandbox Code Playgroud)
这里我想创建关于医生的信息,比如他来自 …
是否可以创建一个表单,修改何时在数据库中找到信息,或者如果数据库中没有任何内容,则添加信息?
所以我有一个模板,允许我显示值,如果在字段中有一个给出字段或答案然后显示答案的空白字段.
我的formset模板:
<form method="POST" action="">
{{ formset.management_form }} {% csrf_token %}
<table>
<!-- <br>{{ formset.as_table }}<br> -->
{% for question in questions %}<hr>
<label for="question">{{ question }} [{{ question.id }}]</label>
<input type="hidden" id="id_form-{{ forloop.counter0 }}-question" name="form-{{ forloop.counter0 }}-question" value="{{ question.id }}"/>
</p>
{% if question.reply_set.all %}
{% for reply in question.reply_set.all %}
<p>
<label for="answer">Réponse :</label>
<input type="text" id="id_form-{{ forloop.parentloop.counter0 }}-answer" name="form-{{ forloop.parentloop.counter0 }}-answer" value="{{ reply.answer }}"/>
</p>
{% endfor %}
{% else %}
<p>
<label for="answer">Réponse :</label>
<input …Run Code Online (Sandbox Code Playgroud) 我不知道如何为我的表单集进行自定义验证。我试图阻止用户在同一年选择超过 12 次,但是当我打印它时,cleaned_data 作为每个表单的不同字典出现。
我想将所有形式分组到 1 个字典中,以检查一年是否出现超过 12 次,或者以更好的方式编写。
我的代码:
表格.py
class SellerResultForm(forms.ModelForm):
class Meta:
model = SellerResult
fields = ('month', 'year', 'result',)
widgets = {
'month': forms.Select(attrs={'class': 'form-control',}),
'year': forms.Select(attrs={'class': 'form-control',}),
'result': forms.TextInput(attrs={'class': 'form-control',}),
}
def has_changed(self): #used for saving data from initial
changed_data = super(SellerResultForm, self).has_changed()
return bool(self.initial or changed_data)
def clean(self):
cleaned_data = super(SellerResultForm, self).clean()
print(cleaned_data)
# prints a set of dictionaries
# {'month': 4, 'year': 2017, 'id': 1, 'result': 1000}
# {'month': 5, 'year': 2017, 'id': …Run Code Online (Sandbox Code Playgroud) 我正在阅读 django 文档并找到了该add_fields方法。
文档说:
“如果您需要向表单集中添加其他字段,这可以轻松完成。表单集基类提供了 add_fields 方法。”
我想使用它,但没有示例或解释如何在视图和模板中使用它。您能给我提供一个使用此方法的小例子吗?
我有 2 个模型First,并且SecondFK 从Second到First。我为 2 类创建了一个表单,并为Second. 在模板上,我手动设计了表单,并使用 jQuery,我可以添加Second.
在 UpdateView 上,表单已正确填充,但是当我提交表单时,所有Second实例都会使用新 id 再次创建,而不是更新它们。我仔细检查了 HTML 上是否有name=PREFIX-FORM_COUNT-id具有正确的 id,但 Django 似乎忽略了它。
我正在使用 Django 2.2.12 和 Python 3.6
这是我所做的:
模型.py
class First(models.Model):
name = models.CharField(max_length=100, null=False)
class Second(models.Model):
first= models.ForeignKey(First, null=False, on_delete=models.CASCADE)
number= models.FloatField(null=False, default=0)
Run Code Online (Sandbox Code Playgroud)
表格.py
class FirstForm(forms.ModelForm):
class Meta:
model = First
fields = "__all__"
class SecondForm(forms.ModelForm):
class Meta:
model = Second
fields = "__all__"
SecondsFormset …Run Code Online (Sandbox Code Playgroud)