Django Many-to-Many (m2m) Relation to same model

纵然是瞬间 提交于 2019-11-26 19:56:49

问题


I'd like to create a many-to-many relationship from and to a user class object.

I have something like this:

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

The question is if I can use the class reference inside itself. Or do I have to use "self" insead of "MyUser" in the ManyToManyField? Or is there another (and better) way to do it?


回答1:


Technically, I'm pretty sure "MyUser" or "self" will work, as long as it's a string in either case. You just can't pass MyUser, the actual class.

However, the docs always use "self". Using "self" is not only more explicit about what's actually happening, but it's impervious to class name changes. For example, if you later changed MyUser to SomethingElse, you would then need to update any reference to "MyUser" as well. The problem is that since it's a string, your IDE will not alert you to the error, so there's a greater chance of your missing it. Using "self" will work no matter what the class' name is now or in the future.




回答2:


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



回答3:


don't use 'self' in ManyToManyField, it will cause you object link each other, when use django form to submit it

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

 ...
 aTagForm.save()

and result:

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


来源:https://stackoverflow.com/questions/11721157/django-many-to-many-m2m-relation-to-same-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!