Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 2, 2009 16:22:58

igoreus
От:
Зарегистрирован: 2009-09-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование с Contenttype

Есть модель:

class Photo(models.Model):

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
image = models.ImageField(upload_to=get_upload_to, max_length=1024)

class Common(models.Model):
# Поля...
photo = generic.GenericRelation(Photo)

class Class_common(Common):
# Поля...

class Class_car(Class_common):
# Поля...
при обращении к модели:
Class_car.objects.get(pk=1).photo.all()
запрос к Photo выглядит примерно так:
SELECT "media_photo"."id",
"media_photo"."content_type_id",
"media_photo"."object_id",
"media_photo"."image",
FROM "media_photo"
WHERE ("media_photo"."object_id" = 1 AND "media_photo"."content_type_id" = 41 )
c content_type_id Class_car(41)

а при запросе:
Class_car.objects.filter(photo__isnull=False)
sql выглядит примерно так:
SELECT DISTINCT T6."id",    
"advert_class_car"."class_common_ptr_id",
FROM "advert_class_car"
INNER JOIN "advert_class_common" ON ("advert_class_car"."class_common_ptr_id" = "advert_class_common"."common_ptr_id")
INNER JOIN "common_common" ON ("advert_class_common"."common_ptr_id" = "common_common"."id")
INNER JOIN "media_photo" ON ("common_common"."id" = "media_photo"."object_id")
INNER JOIN "common_common" T6 ON ("advert_class_car"."class_common_ptr_id" = T6."id")
WHERE ("media_photo"."id" IS NOT NULL AND "media_photo"."content_type_id" = 130 )
Я предпологал что content_type_id будет модели Class_car, то есть 41, а не 130

Если кто-то сталкивался с подобным, то как решалась такая задача

PS. если в Photo вместо Contenttypе использовать ForeignKey(Common, related_name='photo'), то все собственно корректо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version