python - 如何从同一张表上的另一个实体自动生成值
问题描述
我有一个包含名称和金额实体的表,我想要发生的是:
这是我在 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 的新手。
解决方案
如果您使用的是 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)
推荐阅读
- c# - ZIP文件解码
- javascript - 从选择中更改其他 ng-model 值。ng-改变正确的方式?AngularJS
- c - 为什么 scanf() 被跳过?
- html - 如何获取屏幕宽度并在 css 中为其添加一些值
- version-control - 是否有可能获得 gfortran 的降级版本?
- java - 如何显示闹钟已设置为明天,稍后我会叫醒你
- java - Java 包 com.itext.pdf 在替换内容时出现渲染/显示问题
- php - php如何创建数组键以便对结果求和
- python - Django:如何在使用 i18n 模式时从 url 中隐藏所有语言前缀
- c++ - 提高C++程序速度的解决方案有哪些?