使用;“初级”;django模型中的场
我有两种型号:地址和电话。在每个模型中,都有一个“默认”布尔字段。我需要它做的是,如果我在表单中提交使用;“初级”;django模型中的场,django,Django,我有两种型号:地址和电话。在每个模型中,都有一个“默认”布尔字段。我需要它做的是,如果我在表单中提交True答案,那么该用户的所有其他记录都必须设置为False 我如何做到这一点 class Address (models.Model): User = models.ForeignKey(User) Primary = models.BooleanField(default=True) Street = models.CharField(max_length=500)
True
答案,那么该用户的所有其他记录都必须设置为False
我如何做到这一点
class Address (models.Model):
User = models.ForeignKey(User)
Primary = models.BooleanField(default=True)
Street = models.CharField(max_length=500)
City = models.CharField(max_length=50)
State = models.CharField(max_length=40)
Zip = models.CharField(max_length=20)
County = models.CharField(max_length=20)
Country = models.CharField(max_length=50, default="United States")
Latitude = models.FloatField(null=True, blank=True)
Longitude = models.FloatField(null=True, blank=True)
class Meta:
verbose_name_plural = "Addresses"
def __str__(self):
primary = 'PRIMARY Address for ' if self.Primary else 'Address for '
return primary + self.User.first_name + ' ' + self.User.last_name
def save(self, *args, **kwargs):
geolocator = Nominatim()
location = geolocator.geocode("{} {}, {}, {}".format(self.Street, self.State, self.Zip, self.Country))
self.Latitude = location.latitude
self.Longitude = location.longitude
super(Address, self).save(args, *kwargs)
class Phone (models.Model):
User = models.ForeignKey(User)
Primary = models.BooleanField(default=True)
Country_Code = models.CharField(max_length=5, default="001")
Area_Code = models.CharField(max_length=5, blank=True, null=True)
Number = models.CharField(max_length=20, blank=True, null=True)
def __str__(self):
return self.Country_Code + "-" + self.Area_Code + "-" + self.Number
您可以使用
post_save
信号或覆盖save
方法。下面是一个简单的片段。如果您想保持一致,请将这些查询放在事务中
def save(self, *args, **kwargs):
geolocator = Nominatim()
location = geolocator.geocode("{} {}, {}, {}".format(self.Street, self.State, self.Zip, self.Country))
self.Latitude = location.latitude
self.Longitude = location.longitude
super(Address, self).save(args, *kwargs)
Address.objects.exclude(id=self.id).update(Primary=False)
您可以使用
post_save
信号或覆盖save
方法。下面是一个简单的片段。如果您想保持一致,请将这些查询放在事务中
def save(self, *args, **kwargs):
geolocator = Nominatim()
location = geolocator.geocode("{} {}, {}, {}".format(self.Street, self.State, self.Zip, self.Country))
self.Latitude = location.latitude
self.Longitude = location.longitude
super(Address, self).save(args, *kwargs)
Address.objects.exclude(id=self.id).update(Primary=False)
非常感谢。我在
return instance
上遇到一个错误,说它找不到引用。我错过什么了吗?@arcee123对不起,那是我的错。我已经编辑过了。哦,更简单。非常感谢我的朋友。我甚至都不知道这件事。这很有效,谢谢。我在return instance
上遇到一个错误,说它找不到引用。我错过什么了吗?@arcee123对不起,那是我的错。我已经编辑过了。哦,更简单。非常感谢我的朋友。我甚至都不知道这件事。这很有效。