- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
将我的代码精简到最少后,它仍然无法工作。我总是得到提示:
(Hidden field id) Select a valid choice. That choice is not one of the available choices.
这就是我的表单的样子:
class ChangeItemForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ChangeItemForm, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields[key].required = False
class Meta:
model = Item
fields = ('name','tags','no')
ChangeItemFormset=modelformset_factory(Item,extra=0,form=ChangeItemForm)
我的观点如下:
def manage_view(request):
if request.method=='POST':
itemforms=ChangeItemFormset(request.POST,
queryset=Item.objects.filter(creator=request.user))
else:
itemforms=ChangeItemFormset(queryset=Item.objects.filter(creator=request.user))
messages.info(request,str(itemforms.is_valid())) #always prints False
context=RequestContext(request)
context.update({'formset':itemforms,
})
return render_to_response('sonitem/test_forms.html',context)
在我的模板中我这样做:
<form action="." method="post" name="upload_image">
<button type="submit" name="action" value="change">change</button>
{%for form in formset.forms%}
{{form}}
{%endfor%}
{{formset.management_form}}
{%csrf_token%}
</form>
messages:
{%for message in messages%}
<div>{{message}}</div>
{%endfor%}
就是这样。我不知道该去哪里进一步寻找。也许我做错了?至少我确信我不知何故错过了表单集如何工作的一个重要部分...如果有人可以帮助我。
编辑:
看起来它与我的模型项目有某种关系。刚刚制作了一个新的简化模型 Item2,并且此代码完全按照预期工作。 Item2 只有上面表格中的字段。返回项目:为什么(更重要的是 - 如何)不在表单集中的模型字段会影响表单集验证?
Item2 模型,正在运行的模型:
class Item2(models.Model):
name=models.CharField(max_length=50)
tags=TagField()
no=models.IntegerField(blank=True,null=True)
creator = models.ForeignKey(User, related_name='creator')
编辑2:
我想我已经圈出了导致麻烦的原因:我已经定义了一个默认的模型管理器,它正在寻找一个状态 - 这是一个 models.IntegerField。一旦我将其放入类中,它就会停止工作并准确地传递上面的错误消息。Item 模型看起来有点像这样:
class Item(models.Model):
PRIVATE_STATUS=1
PUBLIC_STATUS=2
RELEASED_STATUS=3
STATUS_CHOICES=((PRIVATE_STATUS ,'private'),
(PUBLIC_STATUS ,'public' ),
(RELEASED_STATUS,'released'))
status = models.IntegerField(choices=STATUS_CHOICES,default=PRIVATE_STATUS)
public = PublicItemManager()
objects = models.Manager()
name=models.CharField(max_length=50)
tags=TagField()
no=models.IntegerField(blank=True,null=True)
file=models.FileField()
creator = models.ForeignKey(User, related_name='creator')
status=models.IntegerField(blank=True,null=True)
所以我必须扩展我上面的问题。是否可以在模型中使用状态(这绝对是必填字段)并仍然使用表单集?表单集仅用于编辑,不可用于创建项目。而且它总是预先填充,不可能有空的状态字段。
我仍然不明白表单中不存在的字段如何会阻碍其验证。顺便说一句,如果我只使用 ChangeItemForm,则不会。
编辑3:
这是管理器,被精简为最简单的版本,造成了麻烦:
class PublicItemManager(models.Manager):
def get_query_set(self):
return super(PublicItemManager,
self).get_query_set().filter(status=self.model.PUBLIC_STATUS)
当我
#public=PublicItemManager
一切都很顺利。
编辑4:
哦,顺便说一句:当我让查询集与对象管理器一起使用时,为什么公共(public)管理器会影响任何验证?
queryset=Item.**objects**.filter(creator=request.user)
最佳答案
在研究了 django-docs 很长一段时间后,我找到了解决方案。看起来在某些情况下 django 创建的“自动”管理器不是 _default_manager。文档在这里:http://docs.djangoproject.com/en/1.2/topics/db/managers/#controlling-automatic-manager-types
这是工作 Manager 的代码:
class PublicItemManager(models.Manager):
#this is the important line:
use_for_related_fields = True
def get_query_set(self):
return super(PublicItemManager,self).get_query_set().filter(status=self.model.PUBLIC_STATUS)
关于django - 当我使用自定义模型管理器时,为什么我的 Django modelformset 总是无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950196/
我的问题类似于 Django Passing Custom Form Parameters to Formset 我有这些课 class Game(models.Model): home_te
对于我的 Django 项目,我在模板中渲染模型表单集 election_formset = modelformset_factory(Election, except=('Complete',),
Django 文档没有很好地记录这个主题。事实上,他们在文档中唯一的引用是这一段: How to work with ModelForm and ModelFormSet WizardView.ins
我在一页上有两个表单,每个表单都有自己的提交按钮。使用 JS 脚本,我可以为这两个表单中的每一个动态添加一个新的表单集。我面临的情况是,我可以为页面上首先显示的表单添加任意数量的新表单,并且所有表单都
我现在很绝望,我想不通。对我来说这应该很容易做到,但我还没有找到任何解释这一点的答案。 两个模型之间没有外键: class Employee(models.Model): surname =
我无法使用正确的代码,但我发现了比萨饼/配料问题并且它很接近,所以我正在修改它以提出我的问题。 Django ModelForm for Many-to-Many fields 我们有很棒的披萨和浇头
我正在编写自定义模型表单集。我需要按字段“排序”的值对表单进行排序。我在子表单集类中重载了 BaseFormSet 的 __iter__ 方法。 我的类继承自BaseFormSet: class So
在 Django ModelForm 中,您可以更改字段的小部件类型,如下所示: class EntryForm(ModelForm): entity = forms.CharField()
我有一个在 View 中创建的模型集,如下所示: CarpoolFamilyInviteModelFormset = modelformset_factory(CarpoolFamilyInv
我有一个问题,需要在同一页面上提供多个模型支持的表单。我了解如何使用单个表单执行此操作,即只需创建两个表单,将它们称为不同的名称,然后在模板中使用适当的名称。 现在,您究竟如何扩展该解决方案以使用模型
我想使用 Django (1.4) modelformset,其中加载表单集时,表单将按模型中的 exam_date 字段进行排列。为此,我创建了以下简单的 BaseModelFormSet clas
我有一个由 inlineformset_factory 创建的 inlineformset。inlineformset 字段之一是 DATE 字段,我想添加一个日历小部件。 我该如何设置这个小部件?
我遇到错误 django.forms.utils.ValidationError: ['ManagementForm data is missing or has been tampered with
我只是想澄清一下。我正在处理 Django Form Wizard documentation 在文档中,它谈到表单向导能够与 ModelForm 和 ModelFormSet 一起“工作”。我想澄清
我什么时候应该使用 Form,什么时候使用 ModelForm?另外,我应该什么时候使用 FormSet,什么时候使用 ModelFormSet?似乎我可以用常规的 Form/FormSet 做任何事
将我的代码精简到最少后,它仍然无法工作。我总是得到提示: (Hidden field id) Select a valid choice. That choice is not one of the
我正在重写我们应用程序的很大一部分,它需要用户创建一个附加有奖励的项目。 该表单分为不同的步骤,前两个是正常的项目,下一个是奖励,最后是一个简单的预览,让用户来回滑动即可创建完美的项目。 我的form
我有一个模型表单 - ClinicallyReportedSample,它链接到一个样本模型。 我正在尝试为 ClinicallyReportedSample 创建一个表单集,其中基于 Sample
背景:我正在构建一个个人词典网络应用程序,并且有一个术语和定义的查询集。在我的网络应用程序中,我有一个编辑页面,我想在其中显示一个 ModelFormSet,允许用户编辑任何/所有条目,并在需要时删除
我正在使用 Django 的 FormWizard。它工作正常,但我无法正确显示任何空模型表单集。 我有一个名为 Domain 的模型。我正在创建一个像这样的 ModelFormset: Domain
我是一名优秀的程序员,十分优秀!