不能使用def destroy viewset.viewset(软删除)

时间:2019-01-21 08:35:49

标签: python django

我得到了这个错误,我已经搜索并解决了这个问题,已经添加了date_time变量,但是不能,我只想使用viewset,请帮我解决:(

django.core.exceptions.FieldError: Cannot resolve keyword 'transaction' into field. Choices are: address, created_at, deleted_at, id, notification, phone_number, status, total, transactionvariant, updated_at, user, user_id

这是我的def destroy(views.py):

class TransactionView(viewsets.ViewSet):
    def list(self, request):
        user = get_object_or_404(User, pk=request.user.id)
        queryset = Transaction.objects.filter(user_id=user).exclude(deleted_at__isnull=False)
        serializer = TransactionSerializer(queryset, many=True)

        return Response(serializer.data, status=200)

    def retrieve(self, request, pk=None):
        user = get_object_or_404(User, pk=request.user.id)
        transaction = TransactionVariant.objects.filter(transaction__pk=pk).filter(transaction__user_id=user)
        serializer = TransactionVariantSerializer(transaction, many=True)
        return Response(serializer.data)

    def destroy(self, request, pk=None):
        date_time = datetime.now()
        # user = get_object_or_404(User, pk=request.user.id)
        transaction = Transaction.objects.filter(transaction__pk=pk).update(deleted_at=date_time)
        serializer = TransactionSerializer(transaction, many=True)
        return Response(serializer.data)

和我的serializers.py

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('name',)

class VariantSerializer(serializers.ModelSerializer):
    # product = ProductSerializer(many=False, read_only=True)
    class Meta:
        model = Variant
        fields = ('name', 'size', 'color', 'price', 'image_link',)

class TransactionVariantSerializer(serializers.ModelSerializer):
    variant = VariantSerializer(many=False, read_only=True)
    # products = serializers.VariantSerializer(variant)
    # products = serializers.(fields='variant')
    class Meta:
        model = TransactionVariant
        fields = ('quantity','variant')


class TransactionSerializer(serializers.ModelSerializer):
    transaction_id = serializers.IntegerField(source='id')
    # product = ProductSerializer(many=False, read_only=True)
    # variant = VariantSerializer(many=False, read_only=True)
    class Meta:
        model = Transaction
        # fields = ('transaction_id','user_id','status','total','created_at')
        fields = '__all__'

2 个答案:

答案 0 :(得分:0)

我不确定您为什么使用transaction__pk。双下划线表示要遵循的关系,因此假设您正在通过transaction ForeignKey在相关模型上寻找pk字段。但是您没有ForeignKey,而pk直接位于Transaction模型上。只需使用:

Transaction.objects.filter(pk=pk)...

答案 1 :(得分:0)

我已经解决了!这是我的新代码:

def destroy(self, request, pk=None):
        # transaction_id = TransactionVariant.objects.filter(transaction__pk=transactionvariant.transaction__pk)
        # transaction_variant = TransactionVariant.objects.select_related('transaction').get(id=1)
        # print("hihihhihiihihi",transaction_variant)

        date_time = datetime.now()
        user = get_object_or_404(User, pk=request.user.id)
        transaction = TransactionVariant.objects.filter(transaction__pk=pk).update(deleted_at=date_time)
        transaction = Transaction.objects.filter(id=pk).update(deleted_at=date_time)
        print("adsfasdf", transaction)
        serializer = TransactionSerializer(transaction, many=True)
        return Response(serializer.data, many=True)

但是之后,使用url(http://localhost:8000/api/transactions/3/)METHOD Delete时出现新错误,我的数据库当然已经更新了transaction和transaction_variant的Deleted字段,但显示此日志: TypeError:“ int”对象不可迭代

您可以从顶部引用我的serializer.py