python - 如何使用用户名作为 slug 参数 django rest 框架获取 url
问题描述
我有一个带有用户模型的 onetoone 字段的平衡模型,因此每个用户都有一个与自己相关的“平衡”。这是我的模型:
class Balance(models.Model):
user = models.OneToOneField(User, blank=True, on_delete=models.CASCADE)
balance = models.DecimalField(default=0, max_digits=8, decimal_places=2, blank=True)
@receiver(post_save, sender=User)
def create_balance(sender, instance, **kwargs):
if kwargs.get('created', False):
Saldos.objects.get_or_create(user=instance)
print('created balance model to user')
这是我的序列化器
from django.contrib.auth.models import User
from rest_framework import serializers
class OwnerSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username']
class BalanceSerializer(serializers.ModelSerializer):
user = OwnerSerializer(read_only=True)
class Meta:
model = Balance
fields = '__all__'
这是我的看法
from .models import Balance
from rest_framework import viewsets
from .serializers import BalanceSerializer
class BalanceViewSet(viewsets.ModelViewSet):
queryset = Balance.objects.all()
serializer_class = BalanceSerializer
这是我的 urls.py
from django.urls import include, path
from rest_framework import routers
from .views import BalanceViewSet
router = routers.DefaultRouter()
router.register(r'api/balance', BalanceViewSet)
urlpatterns = [
path('', include(router.urls)),
]
这很好用,问题是我希望每个用户的网址都像http://127.0.0.1:8000/api/balance/username而不是http://127.0.0.1:8000/api/余额/1
有没有办法将与该余额相关的用户名放在 url 中?
解决方案
在模型中添加一个slug
字段,Balance
class Balance(models.Model):
.....
slug = models.CharField(max_length=50, unique=True) # make it unique
运行迁移命令。
然后在BalanceSerializer
,
class BalanceSerializer(serializers.ModelSerializer):
user = OwnerSerializer(read_only=True)
class Meta:
model = Balance
fields = '__all__'
lookup_field = 'slug'
然后在你看来,
class BalanceViewSet(viewsets.ModelViewSet):
queryset = Balance.objects.all()
serializer_class = BalanceSerializer
lookup_field = 'slug'
现在试试http://127.0.0.1:8000/api/balance/your-slug
注意:我不在本地测试它,但它应该可以工作。
推荐阅读
- javascript - React,使用 useEffect 更新数据,一个数据是一个数组,但是当我使用 map 或 Object.keys(data).map 时,两者都不起作用。如何让它发挥作用?
- http - golang 正确的 http2 请求
- django - 如何在 Django 模型的 ManyToManyField 中添加 id(而不是对象)?
- c++ - 如何改进我的抽象可迭代构造以消除显式模板使用的需要?
- python - 如何在指定字符串的一部分之后抓取指定数量的字符?
- python - Pandas:如何过滤列出的时间戳
- php - 即使 Chrome 缓存已被禁用,文件也会被缓存
- html - 显示属性在媒体查询中不起作用
- python-3.x - 如何安全卸载 Python 3.6 并在 Mac big sur 上安装 3.9?
- spring-boot - 自定义 oauth 响应的响应参数