Решение, вдохновленное https://stackoverflow.com/a/26203568/2144569
Вы (и я тоже) получили эту ошибку при передаче набора запросов к limit_choices_to, вместо этого непосредственно передайте pk (т.е.: {pk__in:pks}
), и она будет работать:
Я получаю эту ошибку при попытке удалить дубликаты в limit_choices_to, как я делал
limit_choices_to = Q(attr1=True) | Q(attr2=True) | Q(attr3=True)
Я пытался сделать:
def my_func():
return MyModel.objects.filter(Q(attr1=True) | Q(attr2=True) | Q(attr3=True)).distinct().all()
class HeadModel(models.Model):
mtm = models.ManyToManyField(
MyModel,
limit_choices_to=my_func,
)
но я получил ошибку выше, так как это набор запросов. Наконец я сделал
def my_func():
return {'pk__in':MyModel.objects.filter(Q(attr1=True) | Q(attr2=True) | Q(attr3=True)).distinct().values_list('id', flat=True)}
class HeadModel(models.Model):
mtm = models.ManyToManyField(
MyModel,
limit_choices_to=my_func,
)
П.С .: Да, это очень старый пост, но необходимость была / была еще здесь