1

my two model class:

class Bank(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name

class Branch(models.Model):
    ifsc        = models.CharField(max_length=200)
    name        = models.CharField(max_length=200)
    address     = models.TextField(max_length=200)
    city        = models.CharField(max_length=200)
    state       = models.CharField(max_length=200)
    bank        = models.ForeignKey(Bank, on_delete=models.CASCADE,max_length=200)

    def __str__(self):
        return f"{self.name}"

serializer classes,

class BankSerializer(serializers.ModelSerializer):
    class Meta:
        model = Bank
        fields = '__all__'

class BranchSerializer(serializers.ModelSerializer):
    bank = serializers.CharField(source='bank.name', read_only=True)
    class Meta:
        model = Branch
        fields = ["ifsc","name","address","city","state","bank"]

and Views.py

class CityBankNameView(APIView):

    def get_object(self, bank_name, city_name):
        try:
            bank   = Bank.objects.get(name=bank_name)
            branches = Branch.objects.filter(bank__icontains=bank, city=city_name) #<-- icontains
            return branches
        except:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)

    def get(self,request, bank_name, city_name):
        branches = self.get_object(bank_name, city_name)
        serializer = BranchSerializer(branches, many=True)
        return Response(serializer.data)

I am getting attribute error when using bank__icontains

exact error:

AttributeError at /branches/DELHI/AXIS BANK Got AttributeError when attempting to get a value for field ifsc on serializer BranchSerializer. The serializer field might be named incorrectly and not match any attribute or key on the bytes instance. Original exception text was: 'bytes' object has no attribute 'ifsc'.

I am trying for hours but cannot find any solution to it. I seen various answers but none of them helps solve this one

1 Answer 1

1

bank__icontains= expects bank to be a string object, not a Bank object. You can thus rewrite the query to:

branches = Branch.objects.filter(bank=bank, city=city_name)

or if you want the Branches for which the name of the bank contains bank_name, you can filter with:

branches = Branch.objects.filter(bank__name__icontains=bank_name, city=city_name)
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.