Python 如何从同一表上的另一个实体自动生成值
我有一个包含名称和金额实体的表,我希望发生的是: 这是我在models.py上的表格示例:Python 如何从同一表上的另一个实体自动生成值,python,django,django-models,Python,Django,Django Models,我有一个包含名称和金额实体的表,我希望发生的是: 这是我在models.py上的表格示例: class Test(models.Model): test_id = models.IntegerField(primary_key=True) name = models.CharField(max_length=50) amount = models.IntegerField() timestamp = models.DateTimeField() 如果输入的金额为300,名称将为“你好”
class Test(models.Model):
test_id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
amount = models.IntegerField()
timestamp = models.DateTimeField()
如果输入的金额为300,名称将为“你好”,否则如果输入的金额为500,名称将为“世界”。请帮忙,从昨天开始我就一直在努力解决这个问题,我对python和django非常熟悉。创建一个自定义save()方法,类似这样的:
class Test(models.Model):
test_id = models.IntegerField(primary_key=True)
amount = models.IntegerField()
name = models.CharField(max_length=50)
timestamp = models.DateTimeField()
def save(self, *args, **kwargs):
self.name = 'hello' if self.amount == 300 else 'world'
super(Test, self).save(*args, **kwargs)
您可以在模型的自定义save方法上处理此问题,如果您使用的是restapi,则可以在序列化程序级别()上处理此问题。建议的方法是在模型的序列化程序中处理此类数据操作。在序列化程序中使用自定义创建/更新方法(两个解决方案上的逻辑保持不变):
类TestSerializer(serializers.ModelSerializer):
amount=serializers.IntegerField()
name=serializers.CharField()
类元:
模型=测试
字段=[
“测试id”,
“金额”,
“姓名”,
“时间戳”,
]
def创建(自我验证的_数据):
如果验证的_数据['amount']>1200:
已验证的_数据['name']='dry'
elif验证的_数据['amount']==0:
已验证的_数据['name']='wet'
elif 900不,您可以在模型的自定义保存方法中处理它啊,好的,非常感谢!:)
class TestSerializer(serializers.ModelSerializer):
amount = serilaizers.IntegerField()
name = serilaizers.CharField()
class Meta:
model = Test
fields = [
'test_id',
'amount',
'name',
'timestamp',
]
def create(self, validated_data):
if validated_data['amount'] > 1200:
validated_data['name'] = 'dry'
elif validated_data['amount'] == 0:
validated_data['name'] = 'wet'
elif 900 <= validated_data['amount'] <= 1200:
validated_data['name'] = 'light'
elif 500 <= validated_data['amount'] < 900:
validated_data['name'] = 'medium'
elif 0 < validated_data['amount'] < 500:
validated_data['name'] = 'heavy'
return Test.objects.create(**validated_data)