2017-01-20 4 views
0

У меня есть две модели класса, как это:Использование select_related для разделенных запятыми поля

class Problem(models.Model): 
    owner = models.ForeignKey(User) 
    services = models.CommaSeparatedIntegerField(max_length=200) 

class Services(models.Model): 
    name = models.CharField(max_length=50) 
    ... 

Как вы видите, в модели задачи я храню идентификаторы услуг в запятую поле. Например, чтобы решить эту проблему, мы должны выполнить следующие службы: «1,2,3». Я хочу показать пользователю информацию о проблемах и связанных с ними сервисах. Для этого я должен присоединиться к таблице «Проблема к услугам», но я не знаю, как это сделать. Подумайте, что у меня ограниченное количество сервисов, определенных супер-администратором. например, у меня 150 служб.

ответ

0

Используйте ManyToManyField, это именно то, для чего они используются.

+0

Я не хочу использовать ManyToManyField, потому что, когда я могу использовать поле, разделенное запятой, для хранения сервисов, почему я использую другую таблицу? –

+0

Duh - чтобы вы могли использовать его для соединений, select_related и так далее. Если вы хотите, чтобы Django и база данных выполняли вашу работу за вас, вам нужно сказать им, что что-то существует во многих отношениях. И почему поле с длиной 200 макс длины должно интерпретироваться как целые числа, разделенные запятой, лучше, чем другая таблица? – RemcoGerlich

+0

Итак, мы не разделили запятую на поле отношения в django? Итак, вы предлагаете использовать другую таблицу в этой ситуации? –

0

Использовать службы, содержащие ForeignKey. Таким образом, вы можете связать все службы с одной проблемой

+0

У меня ограниченное количество сервисов, определенных супер администратором. например 150 услуг. В таблице проблем я использую эти службы, чтобы знать, что служба ведьм должна быть выполнена для решения проблемы –

+0

@ user2141833. Что вы имеете в виду. Вы по-прежнему можете получить доступ ко всем Услугам, связанным с проблемой, используя 'choice_set.all' – Bobby

+0

@, поскольку разделенное целочисленное поле определенно не является« способом django ». Вы можете получить любую информацию, используя внешний ключ – Bobby