gpt4 book ai didi

python - 模型属性 django 中的简单乘法?

转载 作者:行者123 更新时间:2023-11-30 23:43:42 25 4
gpt4 key购买 nike

我试图在此代码中设置属性阈值的默认值,阈值应该是当前级别*50,这就是模型

class Level (models.Model):
name = models.CharField(max_length=20,null=True, blank=True)
description = models.CharField(max_length=20, null=True, blank=True)
number = models.IntegerField(null=True, blank=True)
threshold = models.IntegerField(null=True, blank=True,default=50*number,editable=False)

我收到错误* 不支持的操作数类型:'int' 和 'IntegerField'

最佳答案

您最好在保存对象时进行此类计算。所以重写 Model.save

或者更好的通用方法是编写自定义字段并覆盖 pre_save

class DependentIntegerField(models.IntegerField):

def pre_save(self, model_instance, add):
if not add: # set the default only while adding model
return super(self, DependentIntegerField).pre_save(model_instance, add)

return model_instance.number*50

您可以进一步增强它并使 DependentIntegerField 变得通用,以便您可以将可调用对象传递给它并进行任何计算,并且您可以进行进一步的增强,例如在使用之前检查用户是否已设置值默认值,并使其更加通用,以便您可以通过将字段类传递给工厂函数来将任何字段作为依赖字段。例如

from django.db import models

class_map = {}

def depends_field_pre_save(self, model_instance, add):
"""
if default is not callable or it is not a model add, lets skip our hook
"""
if not add or not callable(self.default):
super(self.__class__, self).__init__(self,*args, **kwargs)
value = self.default(model_instance)
setattr(model_instance, self.attname, value)
return value

def FieldDepends(field_class):
"""
return a dervied class from field_class which supports dependent default
"""
if field_class in class_map:
# we already created this class so return that
return class_map[field_class]

new_class = type('Depends'+field_class.__name__, (field_class,), {'pre_save':depends_field_pre_save })

class_map[field_class] = new_class

return new_class

像这样使用它

class DependentModel(models.Model):

def threshold_default(model_instance=None):
if model_instance is None:
return 10
return model_instance.number*10

number = models.IntegerField(null=True, blank=True, default=10)
threshold = FieldDepends(models.IntegerField)(null=True, blank=True, default=threshold_default,editable=False)

我创建了一个小型 django 项目 djangodepends在带有测试用例的位桶上

关于python - 模型属性 django 中的简单乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com