【发布时间】:2020-09-22 12:39:54
【问题描述】:
我有一个带有用户模型的 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/balance/1
有什么方法可以将与余额相关的用户名放在 url 中?
【问题讨论】:
-
在
BalanceSerializer你使用的是Saldos,它是从哪里来的? -
@Md.TanvirRaihan 哦,应该是模型平衡,抱歉我刚刚编辑了
标签: python django python-3.x api django-rest-framework