私は 2 つの Django モデルを持っています。ここでモデルの名前を変更しますが、考え方は同じです。
class Photo(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4)
image = models.ImageField(upload_to='photos')
created_at = models.DateTimeField(auto_now_add=True)
class Attachment(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4)
image = models.ImageField(upload_to='attachments')
created_at = models.DateTimeField(auto_now_add=True)
photo = models.ForeignKey(Photo, on_delete=models.CASCADE)
私はビューを持っています:
class PhotoViewSet(viewsets.ModelViewSet):
serializer_class = PhotoSerialzer
queryset = Photo.objects.all()
class AttachmentViewSet(viewsets.ModelViewSet):
serializer_class = AttachmentSerializer
queryset = Attachment.objects.all()
そして私のurls.py
ファイルで:
router = routers.DefaultRouter()
router.register(r'photo', views.PhotoViewSet, 'photo')
router.register(r'attachments', views.AttachmentViewSet, 'attachment')
class NestedDefaultRouter(NestedRouterMixin, routers.DefaultRouter):
pass
router = NestedDefaultRouter()
photo_router = router.register('photo', views.PhotoViewSet)
photo_router.register('attachments', views.AttachmentViewSet,
basename='photo_attachments', parents_query_lookups=['photo'])
管理者経由で写真をアップロードし、それらの写真に添付写真をアップロードして aws 経由で保存できる小さなアプリを作成しました。Djangoに主キーを自動作成させようとしましたが、何らかの理由でうまく機能しませんuuid
でした.私のモデルでそれ。
私の主なエラーは、次のようなURLが必要な場合でも、次のとおりです。
http://127.0.0.1:8000/api/dice/c6e53d17-72ba-4a5f-b72e-26b8b2d25230/attachments/
データベースにある写真のuuidを確認した後、アドレスバーに手動で入力しました(uuidは です)すべての添付ファイルを取得します( URLc6e53d17-72ba-4a5f-b72e-26b8b2d25230
の を使用して、指定された写真に属さない添付ファイルも含む)。uuid
この小さなチュートリアルhereによると、ほとんど同じセットアップがあり、代わりid
にuuid
. これが問題だと推測していますが、よくわかりません。私はまた、このビューセットが問題であると考えていました:
class AttachmentViewSet(viewsets.ModelViewSet):
serializer_class = AttachmentSerializer
queryset = Attachment.objects.all()
特定の写真に添付されたすべての添付ファイルではなく、すべての添付ファイルを取得しているということです。私は次のようなものを使用する必要があると考えてfilter(photo=photo_uuid)
いますが、チュートリアルによると、それを行う必要がないことがわかりましphoto_uuid
たviewset
。
繰り返しますが、私の問題は、id ではなく uuid を扱っている場合、これが私の問題であると信じている場合 (それが何か他のものでない限り)、ネストされたルートを正しく行うにはどうすればよいかということです。それが私が今処理しなければならないものである場合、これAttachmentViewSet
を正しく行う方法よりもfilter
. あるかもしれませんが、そうであれば、ビューセット内でこれにアクセスするにはどうすればよいでしょうか*args
。**kwargs
私はできることがわかりました
def get_queryset(self):
print(self.kwargs)
pass
印刷すると、必要なものが表示され、フィルタリングによって必要なものを返すことができますが、それを行う実際の方法はありますか?