Как запросить общий набор запросов отношения в Django, чтобы аннотировать список объектами, чьи общие отношения является объектом? - PullRequest
0 голосов
/ 31 мая 2019

Модель с родовыми отношениями. Я хочу MyModel.objects.filter () и сделать что-то, чтобы добавить список, содержащий объекты, где их родовые отношения - это его строка из MyModel.objects.filter ()

Я хочу попробовать сделать это одним запросом, если это возможно. Я использую MySQL, если это что-то повлияет.

Чтобы уточнить, я хочу

    list_of_my_models = MyModel.objects.filter()

тогда сделай что-нибудь, чтобы я смог

    for my_model in list_of_my_models:
        for related_my_model in my_model.related_my_models:
             // do something with related_my_model 

Я пытался использовать OuterRef в аннотации с подзапросом, но получил ошибку. "Выражение содержит смешанные типы. Вы должны установить поле output_field." Когда я захожу на страницу, которая его использует.

class MyModel(models.Model):
    x1= models.CharField(max_length=100)
    x2= models.CharField(max_length=255, blank=True)
    x3= models.CharField(max_length=255, blank=True)

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.IntegerField()
    content_object = GenericForeignKey()

def custom_models(object):
    my_models= MyModel.objects.filter(object_id=OuterRef('pk'),  content_type=ContentType.objects.get(model='mymodel', app_label='app_my_model'))
    return MyModel.objects.filter(
        object_id=object.pk,
        content_type=ContentType.objects.get_for_model(object)
    ).annotate(related_my_models=Subquery(my_models))

Так есть ли способ исправить это или есть другой способ достичь желаемого результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...