标签: formset

如何向InlineFormsets添加自定义字段?

我正在尝试使用以下代码将自定义字段添加到InlineFormset,但字段不会显示在Django Admin中.InlineFormset是否也被锁定以允许此操作?我的打印"ding"测试按预期触发,我可以打印出form.fields并在那里看到它们,但实际的字段永远不会在管理员中呈现.

admin.py

from django.contrib import admin
import models
from django.forms.models import BaseInlineFormSet
from django import forms
from forms import ProgressForm
from django.template.defaultfilters import slugify

class ProgressInlineFormset(BaseInlineFormSet):
    def add_fields(self, form, index):
        print "ding"
        super(ProgressInlineFormset, self).add_fields(form, index)
        for criterion in models.Criterion.objects.all():
            form.fields[slugify(criterion.name)] = forms.IntegerField(label=criterion.name)

class ProgressInline(admin.TabularInline):
    model = models.Progress
    extra = 8
    formset = ProgressInlineFormset

class ReportAdmin(admin.ModelAdmin):
    list_display = ("name", "pdf_column",)
    search_fields = ["name",]
    inlines = (ProgressInline,)

admin.site.register(models.Report, ReportAdmin)
Run Code Online (Sandbox Code Playgroud)

python django field formset inline-formset

6
推荐指数
2
解决办法
5671
查看次数

Django:如何在内联formset中显示每个模型对象的表单错误

我有一个作者模型和书籍模型.用户可以修改给定作者的所有书籍的属性.我希望能够为每本书显示错误,而不是列出顶部的所有错误,我该怎么做?

楷模

from django.db import models
from django.forms import ModelForm, Textarea
from django import forms

class Author(models.Model):
    fname = models.CharField(max_length=100)
    lname = models.CharField(max_length=100)
    def fullname(self):
        return '%s %s' % (self.fname, self.lname)
    fullname = property(fullname)
    def __unicode__(self):
        return self.fullname

class Books(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(max_length=50)
    publisher = models.CharField(max_length=50)
    edition = models.CharField(max_length=50)
    comment = models.TextField()
    def __unicode__(self):
         return self.title
Run Code Online (Sandbox Code Playgroud)

视图

def author_books_edit(request, author_id):
    a = get_object_or_404(Author, pk=author_id)
    authorsbooks = a.books_set.all()
    bookformset = inlineformset_factory(Author, Books, can_delete=True, can_order=True, exclude=('company',), extra=1)
    formset = …
Run Code Online (Sandbox Code Playgroud)

django validation django-forms formset inline-formset

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

我可以在django中以单一形式使用多个formset,如果是的话怎么样?

我必须制作一个使用多个formset的表单.请告诉我这是否可行.如果是的话怎么样?

python forms django formset

6
推荐指数
1
解决办法
6509
查看次数

Django如何保存自定义formset

我写了以下自定义formset,但对于我的生活,我不知道如何保存表单.我搜索了Django文档并进行了大量搜索,但没有一个解决方案可行.很多兔子洞,但没有肉;-)有人能指出我正确的方向吗?

// views.py partial //

@login_required

def add_stats(request, group_slug, team_id, game_id, template_name = 'games/stats_add_form.html'):

    if request.POST:

        formset = AddStatsFormSet(group_slug=group_slug, team_id=team_id, game_id=game_id, data=request.POST)

        if formset.is_valid():

            formset.save()

            return HttpResponseRedirect(reverse('games_game_list'))

        else:

            formset = TeamStatFormSet(group_slug=group_slug, team_id=team_id, game_id=game_id)

        return render_to_response(template_name, {'formset': formset,})


// modles.py partial //

class PlayerStat(models.Model):

    game = models.ForeignKey(Game, verbose_name=_(u'sport event'),)
    player = models.ForeignKey(Player, verbose_name=_(u'player'),)
    stat = models.ForeignKey(Stat, verbose_name=_(u'statistic'),)
    total = models.CharField(_(u'total'), max_length=25, blank=True, null=True)

    class Meta:
        verbose_name = _('player stat')
        verbose_name_plural = _('player stats')
        db_table     = 'dfusion_playerstats'

        def __unicode__(self):
            return u'%s' % …
Run Code Online (Sandbox Code Playgroud)

forms django dynamic formset

5
推荐指数
1
解决办法
8364
查看次数

Django - 将参数传递给内联formset

我正在使用inlineformset_factory中间出勤模型为客户和会话之间的多对多关系创建字段.

我在视图文件中有以下内容:

AttendanceFormset = inlineformset_factory(
    Session,
    Attendance,
    formset=BaseAttendanceFormSet,
    exclude=('user'),
    extra=1,
    max_num=10,
    )

session = Session(user=request.user)
formset = AttendanceFormset(request.POST, instance=session)
Run Code Online (Sandbox Code Playgroud)

并且,因为我需要覆盖其中一个表单字段,我将以下内容添加到formset基类:

class BaseAttendanceFormSet(BaseFormSet):

    def add_fields(self, form, index):
        super(BaseAttendanceFormSet, self).add_fields(form, index)
        form.fields['client'] = forms.ModelChoiceField(
                queryset=Client.objects.filter(user=2))
Run Code Online (Sandbox Code Playgroud)

现在,表单正常工作,但我需要将值传递给formset,以便我可以过滤基于当前用户显示的客户端,而不是仅使用id 2.

有人可以帮忙吗?

任何建议表示赞赏

谢谢.

编辑

对于任何读书的人来说,这对我有用:

def get_field_qs(field, **kwargs):
        if field.name == 'client':
            return forms.ModelChoiceField(queryset=Client.objects.filter(user=request.user))
        return field.formfield(**kwargs)
Run Code Online (Sandbox Code Playgroud)

python django formset

5
推荐指数
1
解决办法
3805
查看次数

覆盖 Django 表单集删除行为:如果 Django 模型表单集中的字段为空,则删除表单实例

我经常遇到这个:

我想隐藏表单集中的默认删除框,并在表单集中的每个表单中清除某个字段时删除对象的实例。

典型的问题是,验证会妨碍或破坏空白表单检测并在保存表单集时开始添加所有表单(甚至是额外的空白)。

django formset

5
推荐指数
1
解决办法
4832
查看次数

通用 FormView 中的 Django Formset

您好,我在通用 FormView 中使用了表单集,如下所示:

class RequestRecommendationView(FormView):
    template_name = "account/stepfour.html"
    form_class = formset_factory(StepFourForm)

    def form_valid(self,form):
        print form.is_valid()
        cleaned_data = form.cleaned_data
        # return redirect(reverse("some_url_name"))
Run Code Online (Sandbox Code Playgroud)

formset_factory 的表单如下:

class StepFourForm(forms.Form):
    contact_person = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    company = forms.CharField(required=True)
    request_message = forms.CharField(required=True)
Run Code Online (Sandbox Code Playgroud)

我的html结构是这样的:

<div style="padding-top:100px;padding-left:10px;">
    <h4> Request a Recommendation </h4>
    <form method="post" action="">
            {% csrf_token %}

            <table id="myForm">
                <tbody>
                {% for f in form %}
                    {% for field in f %}
                        <tr>
                            <td>{{field.label_tag}}</td>
                            <td>{{field}}</td>

                            {% for error in field.errors %}
                            <td><span>{{ error }}</span></td>
                            {% endfor …
Run Code Online (Sandbox Code Playgroud)

python django formset

5
推荐指数
1
解决办法
6233
查看次数

django formset 中的初始和实例有什么区别?

django formset 中的初始和实例有什么区别?

什么时候用哪个?

在以下情况下,我应该使用什么来以无效形式显示预填充数据:

formset= FormSet(initial=[{'a':list.b} for list in listslist])
if request.method =='post':
    formset = FormSet(request.post, ---instance/initial? ---)
Run Code Online (Sandbox Code Playgroud)

python django formset

5
推荐指数
1
解决办法
1425
查看次数

Django找到提交的表单

我在一个模板中有3个formset.在给定时间只能看到一个(其他两个完全隐藏):

<form style="display: none;">
Run Code Online (Sandbox Code Playgroud)

所有3个表单都使用默认值呈现,即使没有输入数据也应该有效.

但是,我想知道在验证views.py时提交了哪一个.

在views.py中,我有以下内容:

def submitted(request):

    f1 = formset1(request.POST)
    f2 = formset2(request.POST)
    f3 = formset3(request.POST)

    if f1.is_valid() or f2.is_valid() or f3.is_valid():
        f1.save()
        f2.save()
        f3.save()
        # Do a lot of calculations...

        return render(request, 'submitted.html')
Run Code Online (Sandbox Code Playgroud)

问题是如果只提交了f1,我不想保存f2或f3(每个formset都有自己的提交按钮)."#做了很多计算......"部分相当广泛,我不想不必要地复制代码.

如何使用相同的视图,但仅保存并仅对提交的formset进行计算?

django formset

5
推荐指数
1
解决办法
1879
查看次数

表格每一行中的 Django 表单

我想在表格的每一行上都有一个简单的文本表单。

\n\n

预期结果的小提琴图:https://jsfiddle.net/wstg759f/1/

\n\n

我的Models.py

\n\n
class Person(models.Model):\n    name = models.CharField(max_length=30)\n\nclass Quality(models.Model):\n    name = models.CharField(max_length=30)\n    person=models.ForeignKey(Person)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有一个查询集,它返回所有人的聚合列表、每个人的品质计数、此人的一个随机品质:

\n\n
[\n{\'the_count\': 5, u\'randomquality\': u\'Nice\xe2\x80\x99, u\'person__name\': u\'Joe\'}, \n{\'the_count\': 4, u\'randomquality\': u\'Generous\xe2\x80\x99,u\'person__name\': u\'Mike\'}, \n{\'the_count\': 4, u\'randomquality\': u\'Healthy\xe2\x80\x99,u\'person__name\': u\'John\xe2\x80\x99\'}, \n..\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 view.html (质量是我的查询集)

\n\n
<table>\n    <thead>\n        <tr>\n            <th>Person</th>\n            <th>Qualities count</th>\n            <th>One random quality</th>\n            <th>Add a Quality?</th>\n        </tr>\n    </thead>\n    <tbody>\n    {%for obj in qualities%}\n    <tr>\n            <td>{{ obj.person__name }}</td>\n            <td>{{ obj.the_count  }}</td>\n            <td>{{ obj.randomquality  }}</td>\n            <td>text form to submit a quality for …
Run Code Online (Sandbox Code Playgroud)

forms django ajax django-forms formset

5
推荐指数
1
解决办法
2381
查看次数