【发布时间】:2021-02-17 16:12:34
【问题描述】:
######################要求######################## #####
/add_value/
有效载荷: { "profile_id": "34AB", “amt”:100.00 }
###################### 视图集######################## ############
class cash_viewset(ModelViewSet):
queryset = Cashbalance.objects.all()
serializer_class = SampleSerializer
#######################型号####################### ##############
型号-1 ---
类配置文件(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_id = models.CharField(max_length=50,unique=True)
型号-2 ---
class Cashbalance(models.Model):
profile = models.OneToOneField(Profile, on_delete=models.CASCADE,db_column="profile_id")
remianingAmount = models.FloatField()
amt = models.FloatField()
##############################序列化程序############### ###############
类 SampleSerializer(serializers.ModelSerializer):
profile_id = serializers.CharField(source="profile.profile_id")
remianingAmount = serializers.FloatField(read_only=True)
class Meta:
model = CashBalance
fields = ["profile_id", "amt", "remianingAmount"]
def create(self, validated_data):
profile_dict = validated_data['profile']
userprofile = Profile.objects.get(profile_id=profile_dict['profile_id'])
bank_obj = CashBalance.objects.filter(profile_id=userprofile)
bank_obj.update(amt=validated_data['amt'], remianingAmount=validated_data['amt'])
return bank_obj[0]
def to_representation(self, instance):
data = super(serializers.ModelSerializer, self).to_representation(instance)
print(instance.profile.user.username)
result = {"profile_id": data['profile_id'], "name": instance.profile.user.username,
"remianingAmount": data['remianingAmount']}
return result
################################ 问题是############ ##########
假设,user、profile 和 Cashbalance 表中已经有一些数据
根据上面给出的有效载荷,基于 profile_id,我必须将 amt 值更新为 100,为此我已经在 create 方法中实现了解决方案(上面给出的创建方法),请分享您的输入,我希望无法在 create 方法中完成更新,如何使用 modelviewset 根据我的模型设计以更好的方式改进它
【问题讨论】: