如何在另一个模型(django)中对用户模型使用过滤方法
How to use filter method for user model in another model (django)
我有一个自定义用户模型:
# accounts > models.py > ...
class MyUser(AbstractUser):
[...]
fallowing_tags = models.ManyToManyField('posts.tag', blank=True)
而且我想过滤所有休假特定标签的用户:
from accounts.models import MyUser as User
# ---- or -----
from django.contrib.auth import get_user_model
User = get_user_model()
class Tag(models.Model):
name = models.SlugField(max_length=50, unique=True)
@property
def fallowers(self):
return User.objects.filter(fallowing_tags=self)
但是程序报错:
File "~/path/to/blog/accounts/models.py", line 13, in <module>
from posts.models import Tag, Post
File "~/path/to/blog/posts/models.py", line 3, in <module>
from accounts.models import MyUser as User
ImportError: cannot import name 'MyUser' from partially initialized module 'accounts.models' (most likely due to a circular import) (~/path/to/blog/accounts/models.py)
Django 自动反向添加一个关系,所以没有需要添加一个followers
,你可以查询:
mytag<strong>.myuser_set.all()</strong>
如果要更改名称,可以设置 related_name=…
parameter [Django-doc],例如:
class MyUser(AbstractUser):
# …
fallowing_tags = models.ManyToManyField(
'posts.tag',
blank=True,
<strong>related_name='users'</strong>
)
然后你这样查询:
mytag<strong>.users.all()</strong>
是ImportError
,我想,是因为这条线from accounts.models import MyUser as User
。它可能与 django.contrib.auth
中的 django 内置 User
模型冲突。尝试将其更改为其他名称。
嗯,我想你也可以简单地使用 Myuser
。
尝试:
from accounts.models import MyUser
或
from accounts.models import MyUser as anyAnotherName
Note:
请不要给出任何可能与 django 的库冲突的名称。
我有一个自定义用户模型:
# accounts > models.py > ...
class MyUser(AbstractUser):
[...]
fallowing_tags = models.ManyToManyField('posts.tag', blank=True)
而且我想过滤所有休假特定标签的用户:
from accounts.models import MyUser as User
# ---- or -----
from django.contrib.auth import get_user_model
User = get_user_model()
class Tag(models.Model):
name = models.SlugField(max_length=50, unique=True)
@property
def fallowers(self):
return User.objects.filter(fallowing_tags=self)
但是程序报错:
File "~/path/to/blog/accounts/models.py", line 13, in <module>
from posts.models import Tag, Post
File "~/path/to/blog/posts/models.py", line 3, in <module>
from accounts.models import MyUser as User
ImportError: cannot import name 'MyUser' from partially initialized module 'accounts.models' (most likely due to a circular import) (~/path/to/blog/accounts/models.py)
Django 自动反向添加一个关系,所以没有需要添加一个followers
,你可以查询:
mytag<strong>.myuser_set.all()</strong>
如果要更改名称,可以设置 related_name=…
parameter [Django-doc],例如:
class MyUser(AbstractUser):
# …
fallowing_tags = models.ManyToManyField(
'posts.tag',
blank=True,
<strong>related_name='users'</strong>
)
然后你这样查询:
mytag<strong>.users.all()</strong>
是ImportError
,我想,是因为这条线from accounts.models import MyUser as User
。它可能与 django.contrib.auth
中的 django 内置 User
模型冲突。尝试将其更改为其他名称。
嗯,我想你也可以简单地使用 Myuser
。
尝试:
from accounts.models import MyUser
或
from accounts.models import MyUser as anyAnotherName
Note:
请不要给出任何可能与 django 的库冲突的名称。