django如何使地址模型独特 - 基于房屋和邮政编码/邮政编码

时间:2015-11-14 15:41:20

标签: python django django-models

如何在Django中设置模型,以便根据房屋(名称/编号)和邮政编码/邮政编码创建唯一条目?

例如,我目前在django中有地址模型:

class Address(models.Model): 
    building = models.CharField(max_length=255, blank=True)
    sub_building = models.CharField(max_length=255, blank=True)
    street = models.CharField(max_length=255, blank=True)
    town = models.CharField(max_length=255, blank=True)
    county = models.CharField(max_length=255, blank=True)
    postcode = models.CharField(max_length=255)

我正在尝试使用以下内容访问现有模型(或创建一个新模型)

address, created = Address.objects.get_or_create(postcode=postcode, building=building)

稍后使用完整地址数据进行更新:

Address.objects.filter(pk=address.pk).update(**defaults)

然而,目前这仍然是为同一地址创建新条目

1 个答案:

答案 0 :(得分:1)

您需要为配对建筑物邮政编码添加唯一约束。 在django中,可以通过unique_together https://docs.djangoproject.com/en/1.8/ref/models/options/#unique-together

来实现
class Meta:
    unique_together = ("building", "postcode")

那么你真正需要的不是get_or_create而是update_or_create方法。

address, created = Address.objects.update_or_create(
    postcode=postcode, building=building, defaults=defaults)