Форум сайта python.su
Здравствуйте.
Возникла такая проблема, есть 2 модели:
class Interest(models.Model):
name = models.CharField(max_length=255, verbose_name=u'Название', unique=True)
....
class Post(models.Model):
....
interests = models.ManyToManyField(Interest, blank=True, null=True)
....
id post_id interest_id
103 25461 68
104 25461 75
105 25461 54
Офлайн
p.interests.all().order_by(…)?
Офлайн
ziroвот загвоздка в том что order_by('id') указывает на interest_id, а не на id в таблице blog_post_interests
p.interests.all().order_by(…)?
Офлайн
можно конечно вручную через raw sql вытаскивать записи в нужном порядке, но это такой костыль.. тогда везде где идет взаимодействие интересов и постов нужно будет использовать свою функцию + админку тоже ковырять придется..
как-то это неправильно
Офлайн
т.е. джанга генерирует запрос
SELECT * FROM “account_interest” U0 INNER JOIN “blog_post_interests” U1 ON (U0.“id” = U1.“interest_id”) WHERE U1.“post_id” = 25461
а нужно
SELECT * FROM “account_interest” U0 INNER JOIN “blog_post_interests” U1 ON (U0.“id” = U1.“interest_id”) WHERE U1.“post_id” = 25461 ORDER BY U1.“id”
Офлайн
Используйте промежуточную таблицу в явном виде - http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships
Офлайн
ziroпробовал, не помогает.
Используйте промежуточную таблицу в явном виде - http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships
class post_interests(models.Model):
interest = models.ForeignKey(Interest)
post = models.ForeignKey(Post)
class Post(models.Model):
....
interests = models.ManyToManyField(Interest, blank=True, null=True, through='post_interests')
....
Офлайн
пробовал так:
class post_interests(models.Model):
interest = models.ForeignKey(Interest)
post = models.ForeignKey(Post)
order = models.PositiveIntegerField()
class Meta:
ordering = ['order']
p.interests.all().order_by('order')
FieldError: Cannot resolve keyword 'order' into field.
Офлайн
Как по мне проще добавить поле для таймштампа:
class Interest(models.Model):
name = models.CharField(max_length=255, verbose_name=u'Название', unique=True)
pub_date = models.DateField(auto_now_add=True)
class Meta:
ordering = ['pub_date']
Офлайн
freemonне, тут надо не Interest сортировать :) так можно и по id их отсортировать, это не то )
Как по мне проще добавить поле для таймштампа:class Interest(models.Model):
name = models.CharField(max_length=255, verbose_name=u'Название', unique=True)
pub_date = models.DateField(auto_now_add=True)
class Meta:
ordering = ['pub_date']
Офлайн