Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用;“初级”;django模型中的场_Django - Fatal编程技术网

使用;“初级”;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对不起,那是我的错。我已经编辑过了。哦,更简单。非常感谢我的朋友。我甚至都不知道这件事。这很有效。