问题描述
我有两个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',basename='photo_attachments',parents_query_lookups=['photo'])
我建立了一个小应用程序,可以通过admin上传图片并将附件图片上传到这些图片并通过aws保存。我尝试让Django自动创建主键,但是由于某种原因,它不能很好地工作,即使这样做也可以-我不记得了,但是,uuid
并不是一个问题,因为您可以看到我正在模型中使用它。
我现在的主要错误是,即使我想要这样的网址:
http://127.0.0.1:8000/api/dice/c6e53d17-72ba-4a5f-b72e-26b8b2d25230/attachments/
在检查数据库中有照片的uuid(uuid为c6e53d17-72ba-4a5f-b72e-26b8b2d25230
)后,我手动将其输入到地址栏中,它只是获取了所有附件(甚至不属于指定照片的附件)使用网址中的uuid
。
根据这个小型教程here,我的设置几乎相同,而不是id
,我有一个uuid
。我猜这是问题所在,但我不确定。我还认为这种观点是一个问题:
class AttachmentViewSet(viewsets.ModelViewSet):
serializer_class = AttachmentSerializer
queryset = Attachment.objects.all()
是我要取回每个附件,而不是取回附加到特定照片的所有附件。我认为我应该使用filter(photo=photo_uuid)
之类的东西,但是根据该教程,我发现我不必这样做,更不用说我在{{ 1}},那么我该如何进行过滤。
再次重申,我的问题是,如果我正在处理uuid而不是id,我该如何正确处理嵌套路由,因为这是我认为是我的问题(除非有其他问题)。如果这是我现在必须在photo_uuid
中处理的事情,而不是如何为此正确viewset
处理的事情。也许有AttachmentViewSet
或filter
,但是如果是这样的话,我将如何在我的视图集中访问它。
我确实发现我可以做
*args
当我打印时,我看到了我想要的东西,可以通过过滤返回我想要的东西,但这是实际的方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)