如何在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)
然而,目前这仍然是为同一地址创建新条目
答案 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)