我有一个简单的Django代码.
models.py文件中有我的模型和表单:
from django.db import models
from django.forms import ModelForm
class Supplier(models.Model):
name = models.CharField(max_length=55)
comment = models.TextField(blank=True)
class SupplierForm(ModelForm):
class Meta:
model = Supplier
Run Code Online (Sandbox Code Playgroud)
还有我的test.py:
from django.test import TestCase
from mysite.myapp.models import Supplier, SupplierForm
class SupplierTest(TestCase):
def test_supplier(self):
supplier = Supplier(name="SomeSupplier")
supplier_form = SupplierForm(instance = supplier)
self.assertEquals(supplier_form.is_valid(), True)
Run Code Online (Sandbox Code Playgroud)
当我通过manage.py开始测试时,is_valid()总是返回False,但我期望True.
在这种情况下,失败的原因是什么?is_valid()?我使用Django 1.3.
我在django应用程序中有简单的视图,我只想在其中一个表单有效时显示.我有类似的东西:
@login_required
@require_role('admin')
def new_package(request):
invoicing_data_form = InvoicingDataForm(instance=request.user.account.company.invoicingdata)
if invoicing_data_form.is_valid():
# all here
return HttpResponse('Form valid')
else:
logger.info("Form invalid")
return HttpResponse(json.dumps(invoicing_data_form.errors)
Run Code Online (Sandbox Code Playgroud)
我总是得到表单无效的日志信息消息,但是,我什么也没得到
invoicing_data_form.errors
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我在其他视图中使用用户输入数据验证此表单并且它工作得很好.任何的想法?
编辑:只是为了澄清.我没有在此表单中请求用户提供任何数据.我正在使用此表单来验证某个模型实例(此表单是ModelForm的子类).
我希望从对象获得绑定表单以使用is_valid方法.原因是我有一些旧数据,我希望用户根据新的验证规则进行更正.然后,我想在我的表单中重用clean方法的代码.
我最终序列化了我的回复:
from django.utils import simplejson
from django.core.serializers import serialize
(...)
fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields']
form = forms.MyForm(fields_dict)
if form.is_valid
Run Code Online (Sandbox Code Playgroud)
这可行,但它似乎不是很Djangish.此外,它似乎是一个常见的问题,所以我正在寻找一个更好的方法来做到这一点.
根据文档,从未绑定到未绑定的转换数据不会发生:https: //docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method 但是,这将是最简单的解决方案为了我.