Подтвердить что ты не робот

Django Many-to-Many (m2m) Отношение к той же модели

Я хотел бы создать отношение "многие ко многим" и к объекту пользовательского класса.

У меня есть что-то вроде этого:

class MyUser(models.Model):
    ...
    blocked_users = models.ManyToManyField(MyUser, blank=True, null=True)

Вопрос в том, могу ли я использовать ссылку на класс внутри себя. Или мне нужно использовать "self" insead of "MyUser" в ManyToManyField? Или есть другой (и лучший) способ сделать это?

4b9b3361

Ответ 1

Технически, я уверен, что "MyUser" или "self" будет работать, если это строка в любом случае. Вы просто не можете передать MyUser, фактический класс.

Однако документы всегда используют "я". Использование "Я" не только более явственно касается того, что на самом деле происходит, но и невосприимчиво к изменениям имени класса. Например, если позднее вы изменили MyUser на SomethingElse, вам также потребуется обновить любую ссылку на "MyUser". Проблема в том, что, поскольку это строка, ваша среда IDE не будет предупреждать вас об ошибке, так что у вас больше шансов на ее отсутствие. Использование "self" будет работать независимо от того, какое имя класса теперь или в будущем.

Ответ 2

class MyUser(models.Model):
    ...
    blocked_users = models.ManyToManyField("self", blank=True)

Ответ 3

не используйте 'self' во ManyToManyField, это приведет к тому, что вы будете ссылаться друг на друга, когда будете использовать форму django для ее отправки

class Tag(models.Model):
    ...
    subTag = models.ManyToManyField("self", blank=True)

 ...
 aTagForm.save()

и результат:

 a.subTag == b
 b.subTag == a