簡體   English   中英

如何在Django中映射對象?

[英]How can I map objects in Django?

假設我在POST方法中具有三個字段field1field2field3但是在POST方法中, field2field3在添加到數據庫期間應該具有相同的值。 因此,無需手動添加例如field2=2field3=2 我可以只添加field1=1field2=2 ,然后將field3=2自動添加到該主體,最后將整個3個字段添加到數據庫。 我不知道應該如何以最佳方式完成它? 是否應該考慮到這樣做? 我嘗試如下所示的方式。

views.py:

class UserObject(GenericAPIView):

    def get_serializer_class(self, *args, **kwargs):
        if self.request.method == 'POST':
            return ObjectPostSerializer
        return ObjectSerializer

    def post(self, request, user_id):

        serializer = ObjectPostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user_id=user_id)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializers.py:

class ObjectPostSerializer(serializers.ModelSerializer):

    def __init__(self, *args, **kwargs):
        super(ObjectPostSerializer, self).__init__(*args, **kwargs)

        for key in self.fields:
            self.fields['field3'].required = False

    class Meta:

        model=Object
        field3 = model.field2

        fields = ('__all__')

可能是您可以使用簡單的邏輯,從后序列化程序中排除field3 ,然后將其設置為模型的save方法

在序列化器中:

class ObjectPostSerializer(serializers.ModelSerializer):

    class Meta:
        model=Object
        exclude = ('field3', )

在模型中:

class Object(model.Model):
    # YOU FIELDS DECLARE HERE

    def save(self, *args, **kwargs):
        if not self.pk:
            self.field3 = self.field2
        super(Object, self).save(*args, **kwargs)

暫無
暫無

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

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