我得到了这个错误,我已经搜索并解决了这个问题,已经添加了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__'
答案 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