今天有点奇怪.
我有一个非常基本的项目.一个表单,并添加到我有一个内联表单.这是作者的书.
当表单加载(/ authors/create /)时,我有一个作者姓名,在下面我有一个表格,我可以在那里为该作者添加书籍.
为了能够拥有动态内联(能够在表单上添加或删除),我正在使用http://code.google.com/p/django-dynamic-formset/.
我现在的问题是,当我添加一个新的内联时,内联表单的所有日期选择器(对于日期发布的字段)都停止工作.
我附上了我的示例项目,显示出了什么问题.您可以在此处下载并运行它.
为什么以及如何解决这个问题?
我有一个只有三个字段的内联formset:
class Estimate_Product_Details(models.Model):
proposalID = models.ForeignKey(Estimate_Construction, verbose_name='Proposal ID')
CID = models.ForeignKey(Product, verbose_name = 'CID')
qty = models.DecimalField(max_digits = 7, decimal_places = 2, verbose_name = 'Quantity')
def __unicode__(self):
return u'%s -- %s' % (self.proposalID, self.CID)
Run Code Online (Sandbox Code Playgroud)
然后我从该模型创建一个表单:
class Product_Form(ModelForm):
class Meta:
model = Estimate_Product_Details
fields = ('CID', 'qty')
widgets = {
'qty' : forms.TextInput(attrs={'size':30})
}
Run Code Online (Sandbox Code Playgroud)
我的目标是让qty输入字段非常小(我有30个用于测试).但是,当我通过内联formset渲染此表单时,该属性根本没有设置.这是在我的视图中创建formset:
pFormSet = inlineformset_factory(Estimate_Construction, Estimate_Product_Details, form = Product_Form)
Run Code Online (Sandbox Code Playgroud)
我哪里错了?为什么qty场地不会变大?
因此,我正在开发一个Web应用程序,该应用程序已在其注册过程中实现了安全性问题.由于我的模型设置方式以及我尝试使用Django基于类的视图(CBV)的事实,我有一些问题,让这一切都干净整合.这是我的模型的样子:
Model.py
class AcctSecurityQuestions(models.Model):
class Meta:
db_table = 'security_questions'
id = models.AutoField(primary_key=True)
question = models.CharField(max_length = 250, null=False)
def __unicode__(self):
return u'%s' % self.question
class AcctUser(AbstractBaseUser, PermissionsMixin):
...
user_questions = models.ManyToManyField(AcctSecurityQuestions, through='SecurityQuestionsInter')
...
class SecurityQuestionsInter(models.Model):
class Meta:
db_table = 'security_questions_inter'
acct_user = models.ForeignKey(AcctUser)
security_questions = models.ForeignKey(AcctSecurityQuestions, verbose_name="Security Question")
answer = models.CharField(max_length=128, null=False)
Run Code Online (Sandbox Code Playgroud)
这是我目前的观点:
View.py
class AcctRegistration(CreateView):
template_name = 'registration/registration_form.html'
disallowed_url_name = 'registration_disallowed'
model = AcctUser
backend_path = 'registration.backends.default.DefaultBackend'
form_class = AcctRegistrationForm
success_url = 'registration_complete'
def form_valid(self, form):
context = self.get_context_data() …Run Code Online (Sandbox Code Playgroud) 我正在使用内联formset,并且需要在实例化formset时更改其中一个非父模型的表单字段的查询集.
class Foo(Model):
name = models.TextField()
class Bar(Model):
foo = models.ForiegnKey(Foo)
other_model = models.ForeignKey(OtherModel)
class BarForm(ModelForm):
class Meta:
model=Bar
foo = Foo.object.get(id=1)
FormSet = inlineformset_factory(Foo, Bar, form=BarForm)
formset = FormSet(instance=foo)
Run Code Online (Sandbox Code Playgroud)
根据在输入视图代码之前未确定的foo的值,我需要为formForm中的所有表单更改BarForm中'other_model'字段的查询集.有没有办法做到这一点?
我面临着一个非常具有挑战性的挑战:
我需要inlineformset_factory将我的计算机连接ParentEntity到我的外键绑定ChildEntities。
My ChildEntity包含一个外键关系,我需要过滤每个登录用户-所以我需要在中的请求ChildForm。
到目前为止,我已经尝试过:
form=kwarg,但无法传递实例-只是一个类。因此,我无法在此处添加请求。formset=kwarg,但是当我尝试通过request=request作为kwarg时,inlineformset_factory出现错误(意外的kwarg)知道我能做什么吗?
谢谢!罗恩
在我的应用程序中上传文件时遇到问题。用户提交报告并可以添加附件(通过外键关系)。我已经显示了内联表单,如果我将其留空就可以使用,但是当我尝试上传文件然后提交表单时,我收到了 500 错误。已制作基本报告,但不会保存内联的附件。
表格.py
class ReportForm(forms.ModelForm):
accidentDate = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
label=(u'Accident Date'),
initial=timezone.now())
claimNumber = forms.CharField(max_length=50,
label=(u'Claim Number'),
required=True)
damageEstimate = forms.DecimalField(max_digits=6, decimal_places=2,
label=(u'Damage Estimate'))
description = forms.CharField(widget=forms.Textarea(attrs={'rows': 5,
'cols': 80}
),
label=(u'Description'),
required=True)
drivable = forms.BooleanField(label=(u'Drivable'),
required=False)
receivedCheck = forms.CharField(max_length=30, label=(u'Who Received Check'))
reported = forms.BooleanField(label=(u'Reported to Insurance Company'),
required=False)
reportedDate = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
initial=timezone.now(),
label=(u'Date Reported to Insurance'))
repairsScheduled = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose …Run Code Online (Sandbox Code Playgroud) Django 说,我应该这样渲染inline formset:
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
{{ form.field_1 }}
{{ form.field_2 }}
<button type="button"> delete </button>
{% endfor %}
<button type="submit"> submit </button>
Run Code Online (Sandbox Code Playgroud)
好的。但是如果我想form动态删除一些表单集对象 ( ) 怎么办?用户按下delete按钮 - 我form从 DOM 中删除,我使用 ajax 删除与form数据库中的对象相关的对象。到目前为止它工作正常。但是当用户点击时submit- 我的 views.py 试图验证表单集:
filled_formset = OrderItemFormSet(request.POST, instance=order)
if filled_formset.is_valid():
Run Code Online (Sandbox Code Playgroud)
并引发错误:
MultiValueDictKeyError at /order/cart/
"'orderitem_set-0-id'"
...\market\ordersys\views.py in show_cart
59. if filled_formset.is_valid():
Run Code Online (Sandbox Code Playgroud)
我认为这是因为formdjango 显示的对象有一定的规律性(第一种形式有 id = …
我正在绞尽脑汁地尝试让 Django 的表单集在更新模型时正常工作。
我有 2 个模型,Product并且ProductSize. 在添加或编辑 .s 文件时,我使用内联表单集将我的ProductSizes 链接到s 。添加对象很好,但是当我尝试编辑 时,我无法提交表单。我在下面得到输出。ProductProductProduct[{'id': ['This field is required.']}]print
以下是我的看法:
class ProductAdd(AddModelView):
model = Product
form_class = UpdateProductForm
template_name = 'intake_goods_form.jinja'
title = 'Add Product Type'
formset_class = ProductSizesFormSet
def form_valid(self, form):
obj = form.save()
formset = self.formset_class(self.request.POST)
if formset.is_valid():
formset.instance = obj
formset.save()
else:
print(formset.errors)
return self.form_invalid(form)
return super().form_valid(form)
def get_context_data(self, **kwargs):
if self.request.POST:
formset = self.formset_class(self.request.POST, instance=self.object)
else:
formset = …Run Code Online (Sandbox Code Playgroud) 我有 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) if formset.is_valid():
values = formset.save(commit=False)
for v in values:
v.correct = True
v.save()
Run Code Online (Sandbox Code Playgroud)
如何删除选中删除的对象?谢谢
django ×10
inline-formset ×10
django-forms ×6
python ×4
datepicker ×1
forms ×1
formset ×1
jquery ×1