Django: хотите ManyRelatedManager, вместо этого получите ManyToManyField - PullRequest
0 голосов
/ 04 мая 2011

Итак, в моем проекте я пытаюсь расширить модель User до класса Staff, а модель Group до класса PermGroup. Однако, когда я сохраняю PermGroup в поле Группы персонала (унаследованное от пользователя), он сохраняет только объект PermGroup как группу, и все поля и методы, которые я определил в своем классе PermGroup, удаляются. Поэтому я решил, что лучшим вариантом будет переопределить поле групп. Из предыдущего вопроса stackoverflow, который я нашел, и документации Django, это должно работать.

class Staff(User):
    User.groups = models.ManyToManyField('PermGroup', blank=True)

Мне нужно использовать «PermGroup», потому что класс появляется позже в файле, а PermGroup имеет поле, которое опирается на класс Staff, поэтому, если бы я изменил порядок, у меня возникла бы та же проблема, только в классе PermGroup. .

Теперь проблема, с которой я сталкиваюсь, состоит в том, что группы теперь являются объектом ManyToManyField, где все остальные поля "manytomany" - это ManyRelatedManagers. Я хочу, чтобы группы были ManyRelatedManager, но я не знаю, как.

Можно ли заставить группы быть ManyRelatedManager, когда я инициализирую его с помощью вызова модели PermGroup?

Если мой подход неверен, и вы можете предложить альтернативу сохранению PermGroups в классе Staff. Я был бы очень признателен.

1 Ответ

0 голосов
/ 04 мая 2011

Почему бы вашим сотрудникам не быть стандартной моделью с ForeignKey (точнее, OneToOneField) для его / ее соответствующего пользователя?

И, чтобы устранить проблему циклической зависимости, вам просто нужно сделать одну зависимость другой. Например, модель PermGroup может иметь поле ManytoMany сотрудников в этой группе. Персоналу персонала не нужно иметь PermGroup, потому что, если вы хотите увидеть, к каким группам принадлежит член, вы бы просто сделали что-то вроде этого:

groups_theyre_in = PermGroups.objects.filter(staff_members__id=id_were_looking_for)
...