簡體   English   中英

Django,更新 model 中的相同行字段,從序列化器獲取數據

[英]Django,update the same row field in model getting data from serializer

我有這個 model:

class AgentDetail(MethodID):

    first_name = models.CharField(max_length=50, blank=True, null=True, unique=True)
    last_name = models.CharField(max_length=50, unique=True, null=True)
    email = models.EmailField(null=False)
    authen_method = models.ForeignKey(AuthMethodID, on_delete=models.CASCADE)
    country_code = models.BigIntegerField(default=1)
    mobile_number = models.BigIntegerField(null=False)
    sms_provider = models.CharField(max_length=50, null=True)
    active_status = models.BooleanField(default=True)
    created_time = models.DateTimeField(default=now, editable=False)
    created_by = models.CharField(max_length=50)
    updated_time = models.DateTimeField(auto_now=True)
    updated_by = models.CharField(max_length=50)

這個序列化器:

class AgentSerializer(serializers.ModelSerializer):
    class Meta:
        model = AgentDetail
        fields = [
            "first_name",
            "last_name",
            "email",
            "authen_method",
            "mobile_number",
            "sms_provider",
        ]

這個views.py:

@api_view(["POST"])
def create_agent(request):
    if request.method == "POST":
        serializer = AgentSerializer(data=request.data, many=False)
        if serializer.is_valid():
            serializer.save()
            request_data = serializer.data
            # AgentDetail.objects.update_or_create(
            #     created_by=request_data["first_name"] + request_data["last_name"],
            #     updated_by=request_data["first_name"] + request_data["last_name"],
            # )
            return Response(status=status.HTTP_200_OK)
        error = Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        return error

與序列化程序一樣,我沒有傳遞 created_by 字段,我需要該字段獲取來自序列化程序數據的 first_name+last_name 的值。我是 DRF 的新手。

您可以在create方法中訪問validated_data數據,並添加您想要的任何額外數據。

序列化程序.py

class AgentSerializer(serializers.ModelSerializer):
    ...

    def create(self, validated_data):
        first_name = validated_data.get('first_name', '')
        last_name = validated_data.get('last_name', '')
        validated_data.update(dict(
            created_by=first_name+last_name,
            updated_by=first_name+last_name
        ))
        return super().create(validated_data)

文檔中所述,您可以將其他屬性傳遞給save方法。

視圖.py

@api_view(["POST"])
def create_agent(request):
    if request.method == "POST":
        serializer = AgentSerializer(data=request.data, many=False)
        if serializer.is_valid():
            request_data = serializer.data
            serializer.save(
                created_by=request_data["first_name"] + request_data["last_name"],
                updated_by=request_data["first_name"] + request_data["last_name"],
            )
            return Response(status=status.HTTP_200_OK)
        error = Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        return error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM