我有一个平衡模型,其中有一个ONETONE字段和用户模型,因此每个用户都与自己有一个“平衡”关系。这是我的模型:
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
这是我的URL.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)),
]
这很好,问题是我希望每个用户的url都是类似于http://127.0.0.1:8000/api/balance/username而不是http://127.0.0.1:8000/api/balance/1
有没有办法将与该余额相关的用户名放在url中
您可以在序列化程序中添加StringRelatedField:
在
Balance
模型中添加slug
字段运行迁移命令。
然后在{}
在你看来
现在试试http://127.0.0.1:8000/api/balance/your-slug
注意:我不在本地测试它,但它应该可以工作
相关问题 更多 >
编程相关推荐