Python Django rest框架多个url参数
如何将示例对象映射到url:website.com/api/ 我明白了 以10为基数的int的文本无效:“username”错误。因此,我知道我需要使用用户id来映射到对象,这是因为如果我使用用户id整数url:website.com/api//,而不仅仅是用户/用户名字符串,我就能够映射到对象 当从user_id integer映射到对象到另一个字段(如user string)时,是否有方法覆盖默认值 我也不明白为什么在Api视图中的def get_对象中传递用户而不是用户id不能解决这个问题 网址 序列化程序 模型 您可以在url中使用用户名。为此,您必须首先手动查找用户,然后使用其id查找示例对象: 您可以在url中使用用户名。为此,您必须首先手动查找用户,然后使用其id查找示例对象:Python Django rest框架多个url参数,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,如何将示例对象映射到url:website.com/api/ 我明白了 以10为基数的int的文本无效:“username”错误。因此,我知道我需要使用用户id来映射到对象,这是因为如果我使用用户id整数url:website.com/api//,而不仅仅是用户/用户名字符串,我就能够映射到对象 当从user_id integer映射到对象到另一个字段(如user string)时,是否有方法覆盖默认值 我也不明白为什么在Api视图中的def get_对象中传递用户而不是用户id不能解决这个问题
urlpatterns = [
url(r'^api/(?P<user>\w+)/(?P<slug>[\w-]+)/$', ExampleDetailAPIView.as_view(), name='example'),
]
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
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)