Python 如何从同一表上的另一个实体自动生成值

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,名称将为“你好”

我有一个包含名称和金额实体的表,我希望发生的是:

这是我在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,名称将为“你好”,否则如果输入的金额为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)