Django:如何提交表单来创建新对象或获取现有对象?

时间:2018-01-07 17:11:02

标签: django dry

使用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>

是否有办法使用现有数据提交表单&#39;所以我可以作为外键传递。

感谢您的时间。

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

1 个答案:

答案 0 :(得分:0)

class Supplier(models.Model):
    """
    The Supplier
    """
    name_text = models.CharField(max_length=200, unique=True <<<------- Take a look)

    def __str__(self):
        return self.name_text

你提供的名字中有唯一= True,这意味着你不能添加两个同名的