Python 知道是否选择了外键

Python 知道是否选择了外键,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,每次您保存Bar,并且用户选择一个Foo时,它必须将可用性降低1。当用户从Foo中取消选择一个选项时,可用性增加1。因此,如果你选择另一个选项,该选项得到1减,而取消选择的选项得到1加 是否有信号可用于检测外键已选择或未选择?您可以存储限制并根据限制和当前使用情况计算可用性,而不是存储可用性 差不多 class Foo(models.Model): name = models.CharField(max_length=256) total = models.SmallIntege

每次您保存Bar,并且用户选择一个Foo时,它必须将可用性降低1。当用户从Foo中取消选择一个选项时,可用性增加1。因此,如果你选择另一个选项,该选项得到1减,而取消选择的选项得到1加

是否有信号可用于检测外键已选择或未选择?

您可以存储限制并根据限制和当前使用情况计算可用性,而不是存储可用性

差不多

class Foo(models.Model):
    name = models.CharField(max_length=256)
    total = models.SmallIntegerField()
    availability = models.SmallIntegerField()

class Bar(models.Model):
    somthing = ...
    foo = models.ForeignKey(Foo, blank=True, null=True)

您可以将可用性设置为模型的属性,而不是方法调用。

是否需要显式存储可用性?每次使用一个简单的foo.bar\u set.count或一个聚合来计算它可能会更好。我需要存储它是的,它可以在应用程序中用于其他用途。但这将如何改变任何事情呢?另一个用途并不意味着你必须实际存储它:你能为另一个用途每次计算它吗?它改变了一些事情,因为反规范化,也就是你在这里所说的,是很棘手的,并且会有失去同步的风险。好吧,假设它不需要存储。我明白我们的意思了
class Foo(models.Model):
    name = models.CharField(max_length=256)
    total = models.SmallIntegerField()
    limit = models.SmallIntegerField() 

    def get_availability(self):
        return limit - self.bar_set().count()