gpt4 book ai didi

python - DRF - PrimaryKeyRelatedField 中的过滤查询集

转载 作者:行者123 更新时间:2023-11-30 22:27:10 25 4
gpt4 key购买 nike

我有以下型号:

class ModelX(models.Model):

STATUS_CHOICES = (
(0, 'ABC'),
(1, 'DEF'),
)
status = models.IntegerField(choices=STATUS_CHOICES)
user = models.ForeignKey(Users)


class Users(models.Model):
phone_number = models.Charfield()

ModelX 的序列化器是:

class ModelXSerializer(serializers.ModelSerializer):
phone_number = serializers.PrimaryKeyRelatedField(
source='user', queryset=Users.objects.get(phone_number=phone_number))

class Meta:
model = ModelX
fields = ('phone_number',)

在创建 ModelX 记录的请求中,我得到 phone_number 而不是 user_id。现在,我必须触发过滤器查询才能获取 user 实例。我该怎么做,即 Users.objects.get(phone_number=phone_number)

此外,创建记录时,status 字段将始终为 0。客户端不会在正文中发布 status 参数。其内在逻辑。 serializers 中是否有一种方法可以自动将 status 字段设置为 0请勿建议在模型中将此字段设置为default=0。这背后有一些逻辑。这只是问题陈述的较短版本。

最佳答案

您可以使用自定义create方法尝试这样版本的序列化器:

class ModelXSerializer(serializers.ModelSerializer):
phone_number = serializers.CharField(source='user.phone_number')

class Meta:
model = ModelX
fields = ('phone_number',)

def create(self, validated_data):
phone_number = validated_data['phone_number']
user = Users.objects.get(phone_number=phone_number)
instance = ModelX.objects.create(status=0, user=user)
return instance

有关 source 的详细信息论证。

关于python - DRF - PrimaryKeyRelatedField 中的过滤查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47010271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com