相关疑难解决方法(0)

Django REST框架创建自定义用户

我是Django领域的新手,但看到那里有很多"神奇".我正在使用Django REST Framework并创建允许免费用户注册的应用程序.我的用户需要一些Django用户不具备的其他字段.所以我用Google搜索扩展用户.有一种想法应该通过创建这样的东西来完成

class MyUser(models.Model):
    user = models.ForeignKey(User, unique=True)
    city = models.CharField(max_length=50, blank=True, default='')
Run Code Online (Sandbox Code Playgroud)

这很好,但我有这个序列化器

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyUser
        fields = ('id', 'username', 'password', 'first_name', 'last_name', 'email', 'city')
Run Code Online (Sandbox Code Playgroud)

所以,问题是这个序列化器在这里做了一些"魔术".它试图找出应该建模的字段...我想让用户在这里列出字段,这些字段在User中,'city'是新的自定义字段.Serializer没有得到应该在用户模型中查看.

我在这里错过了什么?如何告诉这个序列化器我想要用户内的一些字段?我也需要能够创建用户.

python django django-models django-rest-framework

18
推荐指数
3
解决办法
1万
查看次数

如何定制Django Rest Framework序列化器输出?

我有一个像这样的Django模型:

class WindowsMacAddress(models.Model):
    address = models.TextField(unique=True)
    mapping = models.ForeignKey('imaging.WindowsMapping', related_name='macAddresses')
Run Code Online (Sandbox Code Playgroud)

两个序列化程序,定义为:

class WindowsFlatMacAddressSerializer(serializers.Serializer):
    address = serializers.Field()

class WindowsCompleteMappingSerializer(serializers.Serializer):
    id = serializers.Field()
    macAddresses = WindowsFlatMacAddressSerializer(many=True)
    clientId = serializers.Field()
Run Code Online (Sandbox Code Playgroud)

通过视图访问序列化程序时,我得到以下输出:

[
    {
        "id": 1, 
        "macAddresses": [
            {
                "address": "aa:aa:aa:aa:aa:aa"
            }, 
            {
                "address": "bb:bb:bb:bb:bb:bb"
            }
        ], 
        "clientId": null
    }
]
Run Code Online (Sandbox Code Playgroud)

几乎不错,除了我更喜欢:

[
    {
        "id": 1, 
        "macAddresses": [
            "aa:aa:aa:aa:aa:aa",
            "bb:bb:bb:bb:bb:bb"
        ],
        "clientId": null
    }
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

python django json django-rest-framework

9
推荐指数
2
解决办法
1万
查看次数

具有一对一关系的模型的 DRF 序列化程序

鉴于具有一对一关系的 Django 模型,如何设置 Django Rest 框架序列化程序和视图,以便 API 消费者以现金支付和支票支付的端点包括支付模型并允许所有 CRUD 功能?

我试过在这里关注这个问题,但我似乎无法复制该功能。

楷模

class Payment(models.Model):
    """
    Payment Log
    """
    merchant = models.ForeignKey(Entity, on_delete=models.CASCADE, related_name="%(app_label)s_%(class)s_merchant")
    customer = models.ForeignKey(Entity, on_delete=models.CASCADE, related_name="%(app_label)s_%(class)s_customer")
    payment_method = models.ForeignKey(PaymentMethod, on_delete=models.CASCADE)
    trx_amount = models.DecimalField(max_digits=10, decimal_places=3)

class PaymentCash(models.Model):
    """
    Cash payments
    """
    payment = models.OneToOneField(Payment, on_delete=models.CASCADE, primary_key=True)
    date_paid = models.DateField()
    # Other fields

class PaymentCheque(models.Model):
    """
    Cheque deposits
    """
    payment = models.OneToOneField(Payment, on_delete=models.CASCADE, primary_key=True)
    cheque_number = models.CharField(max_length=50)
    # Other fields
Run Code Online (Sandbox Code Playgroud)

示例视图

class PaymentCashViewSet(ListCreateRetrieveUpdateViewSet):
    """
    Cash payment …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

3
推荐指数
1
解决办法
2513
查看次数