我想在我的資料庫欄位之一中存盤一些資料。在使用 POST 方法反序列化時,資料將添加到該欄位。稍后當我想用 GET 方法顯示資料時,我不希望顯示該欄位。
當我做 POST 我反序列化那個字串:
{
"car_id": 3,
"rating": 3
}
稍后views.py我在 POST 時進行反序列化:
@api_view(['POST'])
def car_rate(request):
if request.method == 'POST':
rate_data = JSONParser().parse(request)
rate_serializer = CarRateSerializer(data=rate_data)
if rate_serializer.is_valid():
try:
car_obj = Car.objects.get(pk=rate_data['car_id'])
except Car.DoesNotExist:
return JsonResponse({'message': 'The car with given ID does not exist!'}, status=status.HTTP_404_NOT_FOUND)
# check if rate is from 1 to 5
r = rate_serializer.validated_data['rating']
if int(r) >= 1 and int(r) <= 5:
rate_serializer.save()
return JsonResponse({'message':'The rate is in the scope!'})
else:
return JsonResponse({'message':'The rate is NOT in the scope!'})
return JsonResponse(rate_serializer.errors)
還有我的models.py:
class Car(models.Model):
make = models.CharField(max_length=15)
model = models.CharField(max_length=15)
avg_rating = models.FloatField(default=0)
def __str__(self): # print it when Car instance is needed
return self.make
class CarRate(models.Model):
car_id = models.ForeignKey(Car, related_name='rates',
on_delete=models.CASCADE,
default=0)
rating = models.PositiveIntegerField(default=0)
代碼確實有效(以某種方式)。目前,可以使用 POST 方法為一輛車(多個費率)增加費率。我將費率存盤在 CarRate 類中,稍后它將用于計算汽車的平均費率。我只是不想用 GET 列印出來。
這是我現在的輸出:
{
"id": 2,
"make": "Volkswagen",
"model": "Golf",
"rates": [
4,
4,
2,
3
],
"avg_rating": 0.0
},
我只是希望該rates欄位在列印時不可見。
我閱讀了defer()方法并嘗試了它,但什么也沒發生。有什么幫助嗎?
uj5u.com熱心網友回復:
如果您絕對不希望該欄位出現在您的資料庫中,那么您可以簡單地從 Serializer 欄位選項中洗掉該欄位(您將該欄位命名為 CarRateSerializer)但是如果您希望該欄位出現在您的資料庫中但您不想這表明作為輸出,你可以使用extra_kwargs與“WRITE_ONLY”:真正的在你的序列化器類。我給你一個例子,我用在我的一個專案中
class TopicSerializer(serializers.ModelSerializer):
class Meta:
model = Topic
fields = ['id','title', 'totalMarks', 'status', 'categoryID']
extra_kwargs = {'categoryID': {'write_only': True}}
對于您的代碼,您可以在CarRateSerializer 的該類 Meta 中的欄位下方添加這行代碼
extra_kwargs = {'rating': {'write_only': True}}
我希望這可以解決您的問題
uj5u.com熱心網友回復:
只需rating從中洗掉欄位,CarRateSerializer 或者您可以為 CarRate 創建一個新的序列化程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/365358.html
上一篇:用于計時的Django欄位
下一篇:HTML無法在頁面上加載影像
