"Related Field got invalid lookup: contains" при попытке поиска по полю ManyToMany в Django

Я использую Django 3.2 и Python 3.9. У меня есть эта модель с полем ManyToMany

class Account(models.Model):    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    active = models.BooleanField(default=True)
    ...
    crypto_currencies = models.ManyToManyField(CryptoCurrency)

Затем я создал этот запрос, чтобы найти учетную запись, если она содержит элемент из поля many-to-man

class AccountManager(models.Manager):
    def get_active(self, crypto_currency=None):
        q = Q()
        q &= Q(active=True)
        if crypto_currency != None:
            q &= Q(crypto_currencies__contains=crypto_currency)
        return Account.objects.filter(q)

но, похоже, это не работает. Я получаю эту ошибку

 line 1184, in build_lookup
    raise FieldError('Related Field got invalid lookup: {}'.format(lookup_name))
django.core.exceptions.FieldError: Related Field got invalid lookup: contains

Как правильно составить запрос в Django для поиска по полю ManyToMany?

Если я понимаю вашу проблему, то это так:-

class Account(models.Model):
     crypto_currencies = models.ManyToManyField(CryptoCurrency)

Решение :-

class Account(models.Model):
         crypto_currencies = models.ManyToManyField('CryptoCurrency',related_name='cryptoCurrency')

Если crypto_currency является экземпляром CryptoCurrency, вам не нужно включать поиск

    if crypto_currency is not None:
        q &= Q(crypto_currencies=crypto_currency)
Вернуться на верх