Как установить отношение «многие ко многим» для предопределенных вариантов в моделях Django? - PullRequest
1 голос
/ 14 марта 2012

У меня есть класс WorderOrder с предопределенными типами рабочих заданий:

class WorkOrder( models.Model ) :
    WORK_TYPE_CHOICES = (
        ( 'hc', 'Heating and cooling' ),
        ( 'el', 'Electrical'          ),
        ( 'pl', 'Plumbing'            ),
        ( 'ap', 'Appliances'          ),
        ( 'pe', 'Pests'               ),
        ( 'ex', 'Exterior'            ),
        ( 'in', 'Interior'            ),
        ( 'ot', 'Others'              ),
    )

    work_type = models.CharField( max_length = 2, choices = WORK_TYPE_CHOICES )
    vendor    = models.ForeignKey( Vendor, null = True, blank = True )

Поэтому каждый заказ должен иметь один тип рабочего задания.Позже, поставщик также может быть назначен на рабочее задание.

Я хочу, чтобы класс Vendor имел отношение M2M к тем же вариантам рабочего задания в WorkOrder учебный класс.Другими словами, каждый поставщик может выполнять один или несколько типов работы.Например, Сантехника Боба может выполнять только «Сантехнику», тогда как Solid Home Repair может выполнять «Электротехнику», «Сантехнику», «Экстерьер» и «Интерьер».

Я понимаю, что могу создать еще одну таблицу с именем WorkType и использовать внешние ключи от WorkOrder и M2M от Vendor, но, поскольку я чувствую, что не буду менять выбор типа работы, я бы предпочел, чтобы они были предопределены в models.py.

Кроме того, если я могу предопределить его в models.py, то мне не нужно предварительно заполнять таблицу WorkType во время развертываний и обновлений.

1 Ответ

1 голос
/ 14 марта 2012

Некоторые опции для вас:

  1. создайте модель для work_type_choices, создайте экземпляры записей (hc, el и т. Д.), Затем используйте множество полей или

  2. создайте поле char и сохраните в нем значения CSV (например, «hc, el»), разделив / объединив значение в его элементы, как требуется, или

  3. encapsuleвышеупомянутое charfield и функционирует в настраиваемое поле и использовать это

  4. использовать чужой фрагмент, например: http://djangosnippets.org/snippets/1200/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...