【发布时间】:2018-01-07 17:11:02
【问题描述】:
使用django1.11.4。
我正在尝试创建一个用于将项目添加到数据库的页面,但是,为此,我需要创建/获取几个不同的对象(产品、制造商、供应商),它们的形式构成了整体的一部分添加项目的表单。
在大多数情况下,会有现有的产品、制造商和供应商。所以我想检索现有对象并将其用作相关表单的外键。例如制造商是产品的外键。
但是,当我尝试提交现有对象的详细信息时,对于所有表单。例如供应商。 is_valid 失败。错误是:<ul class="errorlist"><li>supplier_name<ul class="errorlist"><li>Supplier with this Supplier name already exists.</li></ul></li></ul>
有没有办法提交带有“现有数据”的表单,以便我可以作为外键传递。
感谢您的宝贵时间。
class SupplierTestCase(FormTestCase, BasicTests):
@classmethod
def setUpTestData(cls):
super(SupplierTestCase, cls).setUpTestData()
cls.form = SupplierForm
def setUp(self):
super(SupplierTestCase, self).setUp()
self.data = {'supplier_name_text': self.supplier_name}
self.blank_data = {
'supplier_name_text': ['This field is required.']
}
def test_valid_data(self):
form = self.form(self.data)
self.assertTrue(form.is_valid())
commit = form.save()
self.assertEqual(commit.supplier_name_text, self.supplier_name)
def test_get_data(self):
form = self.form(self.data)
self.assertTrue(form.is_valid())
if form.is_valid():
commit = form.save()
self.assertEqual(commit.supplier_name_text, self.supplier_name)
form = self.form(self.data)
#The problem is below vvvv
self.assertTrue(form.is_valid())
if form.is_valid():
commit = form.save(commit=False)
data = model_to_dict(commit)
get, created = Supplier.objects.get_or_create(supplier_name_text=data.get('supplier_name_text'))
self.assertFalse(created)
型号
class Supplier(models.Model):
"""
The Supplier
"""
supplier_name = models.CharField(max_length=200, unique=True)
def __str__(self):
return self.name_text
【问题讨论】:
-
请您的型号!
-
@rakwen 没问题,给我一点时间
-
好的,我在等! . . .
-
我的回答对你有帮助吗?
-
谢谢@rakwen。如果我删除
unique = True,正如你所说,我将有多个同名供应商,是否可以保留unique = True,因为我最终会在我的数据库中重复,或者删除unique = True是唯一的解决方案?