"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)