Опитвам се да добавя допълнително потребителско поле към django модел. Имах доста трудно време да разбера как да направя следното и ще дам награда от 150 точки за първия напълно правилен отговор, когато стане наличен (след като стане наличен -- вижте като справка Подобряване на кода за изглед на Python/django).
Имам следния модел с персонализирана дефиниция, която връща брой видеоклипове за всеки потребител --
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
positions = models.ManyToManyField('Position', through ='PositionTimestamp', blank=True)
def count(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute(
"""SELECT (
SELECT COUNT(*)
FROM videos_video v
WHERE v.uploaded_by_id = p.id
OR EXISTS (
SELECT NULL
FROM videos_videocredit c
WHERE c.video_id = v.id
AND c.profile_id = p.id
)
) AS Total_credits
FROM userprofile_userprofile p
WHERE p.id = %d"""%(int(self.pk))
)
return int(cursor.fetchone()[0])
Искам да мога да поръчам по брой, т.е. UserProfile.objects.order_by('count')
. Разбира се, не мога да направя това, затова задавам този въпрос.
Преди се опитах да добавя персонализиран диспечер на модели, но проблемът с това беше, че също трябва да мога да филтрирам по различни критерии на модела UserProfile: По-конкретно, трябва да мога да направя: UserProfile.objects.filter(positions=x).order_by('count')
. Освен това трябва да остана в ORM (не мога да имам необработен sql изход) и не искам да поставя логиката на филтриране в SQL, защото има различни филтри и ще изисква няколко оператора.
Как точно бих направил това? Благодаря ти.