标签: formset

没有实例的Django Formset

这个 Django Doc中,解释了如何创建一个允许您编辑属于特定作者的书籍的表单集.

我想要做的是:创建一个formset,允许您添加属于新作者的新书...在同一个formset中添加Book及其作者.

你可以点亮一盏灯吗?谢谢.

python forms django formset inline-formset

8
推荐指数
1
解决办法
4192
查看次数

Django formset不验证

我试图保存一个formset但它似乎绕过is_valid(),即使有必要的字段.

为了测试这个我有一个简单的形式:

class AlbumForm(forms.Form):
  name = forms.CharField(required=True)
Run Code Online (Sandbox Code Playgroud)

风景:

@login_required
def add_album(request, artist):
  artist = Artist.objects.get(slug__iexact=artist)
  AlbumFormSet = formset_factory(AlbumForm)
  if request.method == 'POST':
    formset = AlbumFormSet(request.POST, request.FILES)
    if formset.is_valid():
      return HttpResponse('worked')
  else:
    formset = AlbumFormSet()
  return render_to_response('submissions/addalbum.html', {
   'artist': artist,
   'formset': formset,
  }, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

和模板:

<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
{{ formset.management_form }}
{% for form in formset.forms %}
  <ul class="addalbumlist">
    {% for field in form %}
     <li>
        {{ field.label_tag }}
        {{ field }}
        {{ field.errors }}
     </li>
    {% endfor …
Run Code Online (Sandbox Code Playgroud)

forms django formset

8
推荐指数
2
解决办法
7672
查看次数

Django访问formset数据

我无法访问通过我的formset提交的数据.这是我的代码:

模板:

<form action="" method="post">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}

    {{ form.as_p }}

    {% endfor %}

    <input type="submit" value="Submit">

</form>
Run Code Online (Sandbox Code Playgroud)

视图:

def addMembers(request, id, members):
    if request.user.is_authenticated():
        members = int(members)
        MemberFormSet = formset_factory(MemberForm, extra = members)
        if request.method == 'POST':
            print 'post'
            formset = MemberFormSet(request.POST)
            if formset.is_valid():
                cd = formset.cleaned_data
                for f in formset:
                    first_name = cd.first_name
                    last_name = cd.last_name
                    email = cd.email
                    house = House.objects.get(id = id)
                    member = Member(first_name = first_name, …
Run Code Online (Sandbox Code Playgroud)

forms django formset

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

Django 管理内联 - 最少的表单数

在 Django 中创建自定义模型管理内联时,您可以设置两个参数extramax_num:要显示的附加表单的数量,以及允许用户附加到父对象的最大对象数。

我有一个问题模型,每个模型都可以有多个答案,这些答案在问题管理中内嵌。大多数问题都会有三个答案,所以我想默认显示三个内联;然而,当编辑一个已经有三个答案的问题时,在很可能根本没有更多答案的情况下显示三个完整的额外字段看起来很拥挤和俗气。我想要的本质上是一个min_num参数:我想默认显示至少三个字段,如果已经少于三个答案,则为空,同时仍然允许用户添加更多,然后全部显示。

我发现门票将这个既表单集内联,但它看起来像他们还没有得到解决。目前在 Django 1.4 中有什么方便的方法可以做到这一点吗?

django django-admin formset inline-formset

7
推荐指数
2
解决办法
4897
查看次数

从 Django 表单集中获取未删除的表单

当我使用一个formset这既can_ordercan_delete我能够得到所有被删除的形式.deleted_forms和所有非删除表格(顺序).ordered_forms

如果我使用不使用的表单集,can_order我将不再有权访问.ordered_forms(它会引发异常)。有没有一种简单的方法来获取未删除的表单列表?

我能找到的最接近的是手动创建它:

[form for form in formset.forms if not formset._should_delete_form(form)]
Run Code Online (Sandbox Code Playgroud)

但是,这是使用“隐藏”方法,似乎很奇怪还没有内置的东西。

django django-forms formset inline-formset

7
推荐指数
1
解决办法
188
查看次数

在 django 表单集中动态添加行

在我的 django 应用程序中,我有两个模型,即PlayerTeam,它们通过多对多关系连接。要在我的表格中动态添加数据,我想使用 javascript 在我的表单中添加Add rowRemove Row按钮,但无法这样做。

详细信息如下:

模型.py

class Player(models.Model):
    pname = models.CharField(max_length=50)
    hscore = models.IntegerField()
    age = models.IntegerField()

    def __str__(self):
       return self.pname

class Team(models.Model):
    tname = models.CharField(max_length=100)
    player= models.ManyToManyField(Player)

    def __str__(self):
        return self.tname
Run Code Online (Sandbox Code Playgroud)

表格.py

class PlayerForm(forms.Form):
    pname = forms.CharField()
    hscore= forms.IntegerField()
    age = forms.IntegerField()

PlayerFormset= formset_factory(PlayerForm)

class TeamForm(forms.Form):
   tname= forms.CharField()
   player= PlayerFormset()
Run Code Online (Sandbox Code Playgroud)

视图.py

def post(request):

   if request.POST:
        form = TeamForm(request.POST)
        form.player_instances = PlayerFormset(request.POST)
        if form.is_valid():
            team= Team()
            team.tname= form.cleaned_data['tname']
            team.save() …
Run Code Online (Sandbox Code Playgroud)

javascript python django django-forms formset

7
推荐指数
1
解决办法
5736
查看次数

如何向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?

好的,所以我需要对视图进行单元测试,在视图中更精确的形式.所以我创建了这样一个单元测试.

class ViewTest(TestCase):
    fixtures = ['fixture.json']
    def setUp(self):
        self.client = Client()
    def test_company_create(self):
        post_data = {
            'form-0-user': '',
            'form-0-share': '',
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 0,
            'form-MAX_NUM_FORMS': 10
        }
    resp = self.client.post('/company/create/', post_data)
    self.assertFormError (resp, 'shareholder_formset', 'share', 'This field is required.')
    self.assertFormError (resp, 'shareholder_formset', 'user', 'This field is required.')
Run Code Online (Sandbox Code Playgroud)

当然我得到了一个错误

AttributeError:'ShareholderFormFormSet'对象没有属性'fields'

因为formset中有表单,而不是字段.....那么测试formset的正确方法是什么?

django unit-testing formset

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