日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在django restful framework中设置django model的property

發布時間:2025/4/16 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在django restful framework中设置django model的property 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

眾所周知,在django的model中,可以某些字段設置@property和setter deleter getter,這樣就可以在存入數據的時候進行一些操作,具體原理請參見廖雪峰大神的博客https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000

可是在我的實現中,如果在數據庫中實現了setter方法,在使用django restful framework序列化后,這個property會被自動忽略,具體表現就是雖然傳入了這個屬性的值,但是在最終寫入數據庫時根本看不見這個,寫入的是空值。

這是我的代碼

class Host(models.Model):id = models.AutoField(primary_key=True)superPass = models.CharField(max_length=128, null=True, default='')@propertydef superPassword(self):origin_password = self.super_pass[0:-5]return origin_password@superPassword.setterdef superPassword(self,new_password):origin_password = new_passwordencrypted = origin_password + "fadfa"self.super_pass = encrypted @superPassword.deleterdef superPassword(self):del self.super_pass

可是插入的時候總是superpass無法插入。查找了源碼,是在django-restful-framework目錄下的?serializers.py的第236行有這么一行代碼

self._validated_data = self.run_validation(self.initial_data)

調試可以看到在self.initial_data中可以看到我的字段,可是在self._validated_data中無法看到這個字段。

再往下查查不到了,繼承的太亂了,實在不知道這種大型項目是怎么維護的。

實在沒法了,只能在視圖中重載了perform_create方法看下取到的值是什么

def perform_create(self, serializer):print(serializer)print(type(serializer))serializer.save()

看到serializer中關于superpassword這一行是

superPassword = ReadOnlyField()

花擦,原來問題在這里,他直接把這個字段給我置為只讀了,吐血

怎么解決呢?只能在序列化的時候在類中加一個屬性

class HostSerializer(serializers.ModelSerializer):superPassword = serializers.CharField(allow_null=True, label='superPassword', max_length=16, required=False)class Meta:省略

這樣就好了,原來如北,寫篇博客聲討一下這個大坑

轉載于:https://www.cnblogs.com/wuxie1989/p/9014877.html

總結

以上是生活随笔為你收集整理的在django restful framework中设置django model的property的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。