[英]Python, Django, Mongodb: view can't find document
我覺得我缺少一些簡單的東西。 在一個小型個人項目上,我有一個 MongoDB,我通過 Djongo 連接到它。 我已經開始制作前端,但使用通用 MongoDB Object ID 的集合有問題。 該視圖將返回 404,而在 MongoDB 內使用相同的查詢返回所需的文檔。 其他頁面都很好,這是唯一使用 ObjectIDField 的頁面,因為它是倉促的后期添加
Model:
class Railway_Firmware(models.Model):
_id = models.ObjectIdField(name='_id', verbose_name='_id', db_column='_id', editable=False, max_length=200, primary_key=True)
qa = models.CharField(name='QA', verbose_name='QA', db_column='QA', max_length=200)
security = models.CharField(name='Security', verbose_name='Security', db_column='Security', max_length=200)
objects = models.Manager()
class Meta:
db_table = "Firmware"
verbose_name_plural = "firmware"
def get_absolute_url(self):
return reverse('firmware-detail-view', args=[self._id])
def __str__(self):
return str(self._id)
View:
class Railway_Firmware_DetailView(generic.DetailView):
model = Railway_Firmware
context_object_name = 'firmware'
template_name = 'firmware/firmware_detail.html'
pk_url_kwarg = '_id'
def get_queryset(self):
print({'_id': ObjectId(self.kwargs['_id'])})
return Railway_Firmware.objects.filter(**{'_id': ObjectId(self.kwargs['_id'])})
URL:
urlpatterns = [ path('firmware/<slug:_id>/', views.Railway_Firmware_DetailView.as_view(), name='firmware-detail-view'),
]
管理員按預期使用鏈接中的相同 631b1ce580404ce3f61d4565 工作,例如:
/admin/web_dev/railway_firmware/631929cc0b15c01285ae87e1/change/
。
將查詢打印到控制台:{'_id': ObjectId('631b1ce580404ce3f61d4565')} 這看起來是正確的,所以我不確定哪里出了問題。 任何幫助將不勝感激,謝謝!
包含 slug 的URLConf
關鍵字參數的名稱在您的路由中是_id
。
您已在DetailView
中指定pk_url_kwarg = '_id'
。 因此, 您的查詢集應用了錯誤的過濾器,因為您的文檔中沒有pk
字段。
queryset = queryset.filter(pk=pk)
在通過其get_object
方法為查詢集構建過濾器時,您需要通知DetailView
使用slug
字段。
class Railway_Firmware_DetailView(generic.DetailView):
model = Railway_Firmware
context_object_name = 'firmware'
template_name = 'firmware/firmware_detail.html'
slug_url_kwarg = '_id'
slug_field = '_id'
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
# Ensure that _id value is an ObjectId type for query filters to work
self.kwargs["_id"] = ObjectId(self.kwargs["_id"])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.