标签: formset

在Django中,如何在模板中手动构建formset?

我正在模板中手动构建一个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)

django django-templates django-forms formset

3
推荐指数
1
解决办法
5824
查看次数

django泛型CreateView和UpdateView中的Modelformset

我有一个模型组织,有两个字段'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)

python django modelform formset

3
推荐指数
1
解决办法
2451
查看次数

Django:向模型formset添加字段

我可以在模型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)

问题是我必须为每张照片添加一个复选框,上面写着"删除这张照片"和一个收音机选择说"将此设置为专辑封面".

提前致谢!

django field model add formset

2
推荐指数
1
解决办法
3510
查看次数

Django:访问formset中的每个表单和FileField

我如何迭代一个formset来获取该表单中的每个表单和FileField?

for file in formset.files:
 ....

for form in formset.forms:
 ....
Run Code Online (Sandbox Code Playgroud)

我想在同一个循环中使用上述内容,因为我需要同时使用它们!

django loops file formset

2
推荐指数
1
解决办法
995
查看次数

当表单类只有一个字段时,Django Formset is_valid 返回“True”,尽管该字段为空

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)

django field formset

2
推荐指数
1
解决办法
2183
查看次数

带有表单集的 django 多种表单

我有一个模型:

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)

这里我想创建关于医生的信息,比如他来自 …

forms django formset multiple-forms

2
推荐指数
1
解决办法
4168
查看次数

是否可以在django中创建允许您直接在数据库中更改或添加的表单?

是否可以创建一个表单,修改何时在数据库中找到信息,或者如果数据库中没有任何内容,则添加信息?

所以我有一个模板,允许我显示值,如果在字段中有一个给出字段或答案然后显示答案的空白字段.

我的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)

python forms django django-forms formset

2
推荐指数
1
解决办法
81
查看次数

Django中表单集的自定义验证

我不知道如何为我的表单集进行自定义验证。我试图阻止用户在同一年选择超过 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)

python django formset

2
推荐指数
1
解决办法
2263
查看次数

如何在 django 中使用“add_fields”?

我正在阅读 django 文档并找到了该add_fields方法。

文档说:

“如果您需要向表单集中添加其他字段,这可以轻松完成。表单集基类提供了 add_fields 方法。”

我想使用它,但没有示例或解释如何在视图和模板中使用它。您能给我提供一个使用此方法的小例子吗?

django formset

2
推荐指数
1
解决办法
1940
查看次数

Django 内联表单集将始终创建新对象而不是更新它们

我有 2 个模型First,并且SecondFK 从SecondFirst。我为 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)

python django django-forms formset inline-formset

2
推荐指数
1
解决办法
3142
查看次数