Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取用户名为slug参数django rest framework的url_Python_Django_Python 3.x_Api_Django Rest Framework - Fatal编程技术网

Python 如何获取用户名为slug参数django rest framework的url

Python 如何获取用户名为slug参数django rest framework的url,python,django,python-3.x,api,django-rest-framework,Python,Django,Python 3.x,Api,Django Rest Framework,我有一个平衡模型,其中有一个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)

我有一个平衡模型,其中有一个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都是类似的,而不是


有没有办法将与此平衡相关的用户名放入url?

您可以在序列化程序中添加StringRelatedField:

username = serializers.StringRelatedField(source='user', read_only=True)

您可以在序列化程序中添加StringRelatedField:

username = serializers.StringRelatedField(source='user', read_only=True)

在您的
余额
模型中添加一个
slug
字段

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'
现在试试


注意:我不在本地测试它,但它应该可以工作。

在您的
余额
模型中添加
slug
字段

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'
现在试试


注意:我不在本地测试它,但它应该可以工作。

谢谢,问题是我希望有类似的URL,而不是知道用户名字段显然在用户身份验证模型中,而平衡模型是OneToOneField with Users我想你在找“lookup\u field=slug”谢谢,问题是,我希望有URL,而不是,知道用户名字段显然在用户身份验证模型中,平衡模型是OneToOneField with Users我想你在
BalanceSerializer
中寻找“lookup_field=slug”,你使用的是model
Saldos
,它来自哪里?@Md.TanvirRaihan哦,它应该是模型平衡,很抱歉,我刚刚在
BalanceSerializer
中编辑了你正在使用的模型
Saldos
,它来自哪里?@Md.TanvirRaihan哦,它应该是模型平衡,很抱歉我刚刚编辑了是的,我认为这是一个可能的解决方案,但是我应该为每个用户手动添加slug,如果有一种方法可以通过default将slug字段设置为与用户用户名相同,那么这可能是一个不错的解决方案。您可以覆盖
.save()
方法,然后使用您的用户名创建slug。然后你不需要手动添加slug。是的,我认为这是一个可能的解决方案,但是我应该为everyuser手动添加slug,如果有一种方法可以通过默认设置slug字段与用户用户名相同,这可能是一个很好的解决方案。你可以覆盖
.save()
方法,然后使用您的用户名创建一个slug。然后,您不需要手动添加段塞。