Tôi có URL sau trong urlpatterns tôi:django-nghỉ ngơi-framework HyperlinkedIdentityField với nhiều args tra cứu
url(r'^user/(?P<user_pk>[0-9]+)/device/(?P<uid>[0-9a-fA-F\-]+)$', views.UserDeviceDetailView.as_view(), name='user-device-detail'),
thông báo nó có hai lĩnh vực: user_pk
, và uid
. URL sẽ trông giống như sau: https://example.com/user/410/device/c7bda191-f485-4531-a2a7-37e18c2a252c
.
Trong chế độ xem chi tiết cho mô hình này, tôi đang cố gắng điền vào trường url
sẽ chứa liên kết quay lại mô hình.
Trong serializer, tôi có:
url = serializers.HyperlinkedIdentityField(view_name="user-device-detail", lookup_field='uid', read_only=True)
tuy nhiên
, nó không Tôi nghĩ rằng vì URL có hai lĩnh vực:
django.core.exceptions.ImproperlyConfigured: không thể phân giải URL cho mối quan hệ siêu liên kết bằng cách sử dụng tên chế độ xem "user-device-detail". Bạn có thể không bao gồm mô hình liên quan trong API của mình hoặc đã định cấu hình sai thuộc tính
lookup_field
trên trường này.
Bạn sử dụng số HyperlinkedIdentityField
(hoặc bất kỳ số nào trong số Hyperlink*Field
) khi URL có hai hoặc nhiều mục mẫu URL? (trường tra cứu)?
Cảm ơn. Tôi đã kết thúc tạo lớp con của riêng HyperlinkedIdentityField giống như phương thức "to_representation()" được ghi đè: def to_representation (self, value): trả về ngược lại ('user-device-detail', kwargs = {'user_pk': value.owner_id, 'uid': value.uid}, yêu cầu = self.context ['request']) – SuperDuperTango
Đánh dấu phần này là được chấp nhận mặc dù tôi chưa thử. điều này có vẻ như một cách hợp lý (và có thể mở rộng) để giải quyết vấn đề. – SuperDuperTango
Giải pháp chỉ hoạt động khi bạn có thể trích xuất tất cả các khóa cần thiết từ 'obj' (trực tiếp trên gián tiếp). Thật không may trong trường hợp phụ thuộc nhiều-nhiều, nó là không thể. – prokher