Django Many-to-Many (m2m) Отношение к той же модели
Я хотел бы создать отношение "многие ко многим" и к объекту пользовательского класса.
У меня есть что-то вроде этого:
class MyUser(models.Model):
...
blocked_users = models.ManyToManyField(MyUser, blank=True, null=True)
Вопрос в том, могу ли я использовать ссылку на класс внутри себя. Или мне нужно использовать "self"
insead of "MyUser"
в ManyToManyField
? Или есть другой (и лучший) способ сделать это?
Ответы
Ответ 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