Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Family(models.Model):
- name = models.CharField(max_length=100)
- class Category(models.Model):
- name = models.CharField(max_length=100)
- class Trend(models.Model):
- name = models.CharField(max_length=100)
- area = models.ForeignKey(Area, related_name='subcategories')
- families = models.ManyToManyField(Family, related_name='subcategories')
- SELECT
- cat.*,
- subcat.*,
- CASE
- WHEN tr.id IN (
- SELECT tr.id
- FROM family fam
- INNER JOIN subcategoryfamilyrel rel ON fam.id = rel.family_id
- INNER JOIN subcategory subcat1 ON rel.trend_id = subcat1.id
- WHERE
- fam.id = {family.id}
- ) THEN 1
- ELSE 0
- END AS active
- FROM subcategory subcat
- INNER JOIN category cat ON subcat.category_id = cat.id;
- Subcategory.objects.annotate(
- active=Case(
- When(id__in=profile.family.subcategories.all().values('id'), then=True),
- default=Value(False),
- output_field=BooleanField()
- )
- )
- [
- {
- "id": 1,
- "name": "Русский язык",
- "active": true,
- "area": {
- "id": 1,
- "name": "Школа",
- "color": "123456"
- }
- },
- {
- "id": 2,
- "name": "Математика",
- "active": ,
- "area": {
- "id": 1,
- "name": "Школа",
- "color": "123456"
- }
- },
- {
- "id": 6,
- "name": "Уборка",
- "active": true,
- "area": {
- "id": 2,
- "name": "Дом",
- "color": "ABCDEF"
- }
- }
- ]
- [
- {
- "id": 1,
- "name": "Школа",
- "color": "123456",
- "subcategories": [
- {
- "id": 1,
- "name": "Русский язык",
- "active": true
- },
- {
- "id": 2,
- "name": "Математика",
- "active": false
- }
- ]
- },
- {
- "id": 2,
- "name": "Дом",
- "color": "ABCDEF",
- "subcategories": [
- {
- "id": 3,
- "name": "Уборка",
- "active": true
- }
- ]
- }
- ]
Add Comment
Please, Sign In to add comment