Skip to content

Instantly share code, notes, and snippets.

@rombr
Created October 7, 2016 22:13
Show Gist options
  • Save rombr/b184f8ea2dade6ce1648dfe06085cf6f to your computer and use it in GitHub Desktop.
Save rombr/b184f8ea2dade6ce1648dfe06085cf6f to your computer and use it in GitHub Desktop.
Ответ на тестовое задание https://gist.github.com/dmitry-mukhin/fbc28d3b75605d4dd528
# coding: utf-8
# Ответ на https://gist.github.com/dmitry-mukhin/fbc28d3b75605d4dd528
from collections import defaultdict
from django.db import models
class Item(models.Model):
# .....
def get_options_new(self):
'''
Суть оригинального метода сводится к получению
списка опций, сгруппированных по темам,
причем если ItemOption.item не равно текущему value
берется как None
'''
qs = ItemOption.objects.select_related('option', 'option__topic')
topics = defaultdict(set)
for item_option in qs:
value = (
item_option.value
if item_option.item_id == self.pk else None
)
topics[item_option.option.topic.name].add(
(item_option.option.title, value, )
)
result = []
for topic, options in topics.iteritems():
result.append(dict(
name=topic,
options=[{'title': i[0], 'value': i[1]} for i in options]
))
return result
class Topic(models.Model):
name = models.CharField(max_length=255)
class Option(models.Model):
topic = models.ForeignKey(Topic)
title = models.CharField(max_length=255)
class ItemOption(models.Model):
item = models.ForeignKey(Item)
option = models.ForeignKey(Option)
value = models.CharField(max_length=20)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment