最佳和最快的方法,仅基于Django中的某些字段添加唯一记录

时间:2019-05-06 07:48:53

标签: django python-3.x django-models

我有一个具有多个字段的模型,其中数据大部分是文本类型。我想验证一下,从现在开始,如果要添加新记录,则该记录应基于3个字段是唯一的。这里的一个字段是另一个表中的一对多字段。

我可以尝试获取所有记录并开始使用for循环检查它们。我尝试使用注释,但是如果记录已在表中,这似乎会有所帮助,但是我想在添加之前进行此验证。我需要一种快速的验证方法。

class Product(models.Model):
    brand = models.TextField(default='{}', null=True)
    sub_brand = models.CharField(null=True)
    .
    .
    .

class ProductNetWeight(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='product_net_weight')
    net_weight = models.CharField(null=True)

1 个答案:

答案 0 :(得分:0)

首先,您需要修改模型以保证唯一性:

class Product(models.Model):
    brand = models.TextField(default='{}', null=True)
    sub_brand = models.CharField(null=True)
    .
    .
    .
    class Meta:
        unique_together = ['brand', 'sub_brand']

然后,在插入新产品(例如un)时,可以像这样使用get_or_create

product, created = Product.objects.get_or_create(brand='my brand', sub_brand='my sub brand') 

如果该产品已经存在,它将在product中返回,并且created将是False,否则它将返回一个新产品,而created将返回成为True