首页 > 解决方案 > 如何从同一张表上的另一个实体自动生成值

问题描述

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

这是我在 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,则名称为“hello”,否则如果输入的金额为 500,则名称为“world”。请帮忙,从昨天开始就一直在尝试解决这个问题,我真的是 python 和 django 的新手。

标签: pythondjangodjango-models

解决方案


如果您使用的是 rest api,您可以在模型的自定义保存方法或序列化程序级别 ( ModelSerializer ) 上处理此问题。推荐的方法是在模型的序列化程序中处理这些类型的数据操作。在您的序列化程序中使用自定义创建/更新方法(两种解决方案的逻辑保持不变):

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)

推荐阅读