我是 drf 的新手,我正在嘗試顯示嵌套物件并同時在 ListCreateView 中具有選擇功能
模型.py
class CarBrand(SoftDeletionModel):
CAR_BRAND_NAME_MAX_LEN = 30
name = models.CharField(
max_length=CAR_BRAND_NAME_MAX_LEN,
)
created_at = models.DateTimeField(
auto_now_add=True,
)
def __str__(self):
return self.name
class CarModel(SoftDeletionModel):
CAR_MODEL_NAME_MAX_LEN = 30
name = models.CharField(
max_length=CAR_MODEL_NAME_MAX_LEN,
)
car_brand = models.ForeignKey(
CarBrand,
on_delete=models.CASCADE,
)
created_at = models.DateTimeField(
auto_now_add=True,
)
updated_at = models.DateTimeField(
auto_now=True,
)
我的邏輯是擁有汽車品牌,然后在創建新車型時指定現有汽車品牌
序列化程式.py
class FullCarBrandSerializer(serializers.ModelSerializer):
class Meta:
model = CarBrand
fields = ('id', 'name', 'created_at')
class IdAndNameCarBrandSerializer(serializers.ModelSerializer):
class Meta:
model = CarBrand
fields = ('id', 'name')
class FullCarModelSerializer(serializers.ModelSerializer):
car_brand = IdAndNameCarBrandSerializer(many=False)
class Meta:
model = CarModel
fields = ('id', 'name', 'created_at', 'updated_at', 'car_brand')
當我沒有car_brand = IdAndNameCarBrandSerializer(many=False)帶有汽車品牌選擇的創建部分時,正確的選擇項_img可以正常作業,但這不是我想要顯示 JSON 不正確_嵌套欄位_img 的方式(它只顯示 id,但我想要 id 和名稱)但是當我添加又是同一行,我在JSON中得到了我想要的,就像這個correct_nested_field_img一樣,但是選擇令人興奮的汽車品牌的功能消失了
視圖.py
class CarModelListCreateView(api_views.ListCreateAPIView):
queryset = CarModel.objects.all()
serializer_class = FullCarModelSerializer
問題 顯示嵌套物件并具有創建功能的正確方法是什么?
uj5u.com熱心網友回復:
我在 django 中并不是很擅長,但我正在嘗試回答這個問題。
為此,您只需:
向您的 serializers.py 添加一個類
序列化程式.py
...
class FullCarModelSerializer(serializers.ModelSerializer):
car_brand = IdAndNameCarBrandSerializer(many=False)
class Meta:
model = CarModel
fields = ('id', 'name', 'created_at', 'updated_at', 'car_brand')
class CreateCarModelSerializer(serializers.ModelSerializer):
class Meta:
model = CarModel
fields = ('id', 'name', 'car_brand')
向現有視圖類添加一種方法。
視圖.py
class CarModelListCreateView(api_views.ListCreateAPIView):
queryset = CarModel.objects.all()
serializer_class = FullCarModelSerializer
def get_serializer_class(self):
if self.request.method == 'POST':
return CreateCarModelSerializer
return FullCarModelSerializer
您可以參考Django rest framework的 api 指南。
serializer_class - 應該用于驗證和反序列化輸入以及序列化輸出的序列化器類。通常,您必須設定此屬性,或覆寫get_serializer_class()方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478813.html
標籤:Python django 休息 django-rest-framework
上一篇:通用C#存盤庫、服務和控制器設計
