在我的models.py 中,我有以下類:
class Project(models.Model):
name = models.CharField(max_length=100)
class ProjectMaterial(models.Model):
project = models.ForeignKey("Project", on_delete=models.CASCADE)
material = models.CharField(max_length=150)
units = models.IntegerField()
我的序列化程式是這樣的:
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = "__all__"
class ProjectMaterialSerializer(serializers.ModelSerializer):
class Meta:
model = ProjectMaterial
fields = "__all__"
我當前的views.py看起來像這樣:
class ProjectList(generics.ListCreateAPIView):
queryset = Project.objects.all()
serializer_class = ProjectSerializer
class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Project.objects.all()
serializer_class = ProjectSerializer
class ProjectMaterialList(generics.ListCreateAPIView):
queryset = ProjectMaterial.objects.all()
serializer_class = ProjectMaterialSerializer
我應該如何創建我的 urlpatterns 以發出 PUT 請求來更改id=1 的專案的單位值,而材料的 id=3?
uj5u.com熱心網友回復:
我想您想更改 id = 3 的 Material Object 的值。在這種情況下,您真的不想將 FK 添加到 url_patterns。相反,您可以通過 PUT 請求發送與 FK 相關的資料資料。
urlpatterns = [
path('<id>/edit/', MaterialUpdateView.as_view(), name='material-update'),
]
如果你真的想改變FK。通過像這樣的 PUT 或 PATCH 請求發送資料
data = {
id: 3,
project: 1,
material: "some material"
units: 25,
}
uj5u.com熱心網友回復:
如果要更新 id=3 的“ProjectMaterial”記錄,并且與 id=1 的“Project”記錄有 FK 關系。您只需要 URL 中的“ProjectMaterial”id 以及需要為相應“Project”記錄更新的資料(因為它與 ProjectMaterial 相關)。
urlpatterns = [
path('/material/<id>/', ProjectMaterialDetail.as_View(), name='project_material')
]
如果只想更新“ProjectMaterial”的“units”欄位,只需將UpdateModelMixin 繼承到新的視圖類“ProjectMaterialDetail”中。您可以將“RetrieveModelMixin”繼承到同一個類中。您需要做的就是確保以正確的格式將資料發送到“ProjectMaterialDetail”視圖的“PUT”方法中的 ProjectMaterial 序列化程式。
{
id: 5,
units: 152,
}
您可以在序列化程式中覆寫 Update 方法,也可以在“PUT”方法中呼叫“partial_update”方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365859.html
上一篇:在Azure資料工廠的Web活動中使用OAuth2.0
下一篇:REST嚴格驗證與否?
