gpt4 book ai didi

python - Django-rest-framework 多个 url 参数

转载 作者:行者123 更新时间:2023-12-05 09:17:24 25 4
gpt4 key购买 nike

如何将“示例对象”映射到 url:website.com/api/<user>/<slug> .

我明白了
invalid literal for int() with base 10: 'username'错误。所以我知道我需要使用用户 ID 才能映射到对象,这是因为如果我使用 user_id(整数)(url:website.com/api/<user_id>/<slug>)而不仅仅是用户/用户名(字符串)。

在将对象从 user_id(整数)映射到另一个字段(如 user(字符串))时,有没有办法覆盖默认值?

另外我不明白为什么在 def get_object 中传递用户而不是 user_id|在 (Api View) 中没有解决这个问题。

网址

urlpatterns = [
url(r'^api/(?P<user>\w+)/(?P<slug>[\w-]+)/$', ExampleDetailAPIView.as_view(), name='example'),
]

API View

class ExampleDetailAPIView(RetrieveAPIView):
queryset = Example.objects.all()
serializer_class = ExampleDetailSerializer

def get_object(self):
user = self.kwargs.get('user')
slug = self.kwargs.get('slug')
return Example.objects.get(user=user, slug=slug)

def get_serilizer_context(self, *args, **kwargs):
return {'request': self.request}

序列化器

class ExampleDetailSerializer(HyperlinkedModelSerializer):
url = serializers.SerializerMethodField()

class Meta:
model = Example
fields = [
'url',
]

def get_url(self, obj):
request = self.context.get('request')
return obj.get_api_url(request=request)

型号

class Example(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
example_name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, blank=True)

class Meta:
unique_together = ('user', 'slug')

def get_api_url(self, request=None):
return api_reverse('example-api:example', kwargs={'user': self.user.username, 'slug': self.slug}, request=request)

@receiver(pre_save, sender=Example)
def pre_save_example_slug_receiver(sender, instance, *args, **kwargs):
slug = slugify(instance.example_name)
instance.slug = slug

最佳答案

您可以在网址中使用用户名。为此,您必须首先手动找到用户,然后使用其 id 找到 Example 对象:

def get_object(self):
username = self.kwargs.get('username')
slug = self.kwargs.get('slug')

# find the user
user = User.objects.get(username=username)

return Example.objects.get(user=user.id, slug=slug)

关于python - Django-rest-framework 多个 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48048066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com