Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
Python 如何设置相关的Django模型字段_Python_Django_Model - Fatal编程技术网

Python 如何设置相关的Django模型字段

Python 如何设置相关的Django模型字段,python,django,model,Python,Django,Model,我有以下简化的问题。假设我有两个Django模型,即(P)项目和(H)ourly,它存储项目的小时值 现在让我们假设这些实体之间存在简单的关系,例如: H.Y=2×H.X+P.PAR。 有没有一种优雅的方法来实现这一点?在何处放置帮助功能: def calc_y(x, par): return 2*x+par class P(models.Model): par = FloatField() class H(models.Model): p = models.Fore

我有以下简化的问题。假设我有两个Django模型,即(P)项目和(H)ourly,它存储项目的小时值

现在让我们假设这些实体之间存在简单的关系,例如: H.Y=2×H.X+P.PAR。 有没有一种优雅的方法来实现这一点?在何处放置帮助功能:

def calc_y(x, par):
    return 2*x+par

class P(models.Model):
    par = FloatField()

class H(models.Model):
    p = models.ForeignKey(P, on_delete.CASCADE)
    x = FloatField()
    y = FloatField()

如果您不需要查询
y
(仅获取值),我们可以将其改为属性:

class P(models.Model):
    par = FloatField()

class H(models.Model):
    p = models.ForeignKey(P, on_delete.CASCADE)
    x = FloatField()

    @property
    def y(self):
        return calc_y(self.x, self.p.par)
P类(models.Model):
PAL=浮点字段()
H类(型号.型号):
p=models.ForeignKey(p,on_delete.CASCADE)
x=浮动字段()
@财产
定义y(自我):
返回计算值(self.x,self.p.par)
因此,我们不将其存储在数据库中:在需要时对属性进行评估。因此,如果您有一个
H
实例
H
,那么
H.y
将让Python计算该值并返回它

这样做的好处是我们避免了数据重复,因此不会出现三个变量之间的关系不满足的情况,我们还节省了内存,因为数据库表将更小


这种方法的一个问题是,由于没有显式存储值,因此不可能在
y
上查询(或者至少不需要一些技巧)。因此,我们无法轻松查询数据库中的所有
H
s,例如
y<0.5

如果您不需要查询
y
(仅获取值),我们可以将其改为属性:

class P(models.Model):
    par = FloatField()

class H(models.Model):
    p = models.ForeignKey(P, on_delete.CASCADE)
    x = FloatField()

    @property
    def y(self):
        return calc_y(self.x, self.p.par)
P类(models.Model):
PAL=浮点字段()
H类(型号.型号):
p=models.ForeignKey(p,on_delete.CASCADE)
x=浮动字段()
@财产
定义y(自我):
返回计算值(self.x,self.p.par)
因此,我们不将其存储在数据库中:在需要时对属性进行评估。因此,如果您有一个
H
实例
H
,那么
H.y
将让Python计算该值并返回它

这样做的好处是我们避免了数据重复,因此不会出现三个变量之间的关系不满足的情况,我们还节省了内存,因为数据库表将更小


这种方法的一个问题是,由于没有显式存储值,因此不可能在
y
上查询(或者至少不需要一些技巧)。因此,我们无法轻松查询数据库中的所有
H
s,例如
y<0.5

您应该将所有带有业务逻辑的代码放在Django应用程序的
services.py

比如你的案子应该是这样的

from .models import H, P

def calculate_y(x, par):
    obj = H.objects.get(x=x)  # if x is unique else use id
    obj.y = 2 * x + par
    obj.save(update_fields['y'])

您可以在为H创建对象后立即调用此函数。

您应该将所有带有业务逻辑的代码放入Django应用程序的
services.py

比如你的案子应该是这样的

from .models import H, P

def calculate_y(x, par):
    obj = H.objects.get(x=x)  # if x is unique else use id
    obj.y = 2 * x + par
    obj.save(update_fields['y'])

您可以在为H创建对象后立即调用此函数。

您是否能够查询
y
?您是否能够查询
y
?哇,这是一个快速响应。好的,我会调查的。谢谢!哇,这是一个快速的反应。好的,我会调查的。谢谢!