如何在另一个模型(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 的库冲突的名称。