如何在另一个模型(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.myuser_set.all()

如果要更改名称,可以设置related_name=…参数[Django-doc],例如:

class MyUser(AbstractUser):
# …

fallowing_tags = models.ManyToManyField(
'posts.tag',
blank=True,
related_name='users'
)

那么你可以这样查询:

mytag.users.all()

这是ImportError,我认为,这是因为这一行from accounts.models import MyUser as User。它可能与django的内置User模型(django.contrib.auth)冲突。试着把它改成另一个名字。

嗯,我认为你也可以直接使用Myuser

试题:

from accounts.models import MyUser

from accounts.models import MyUser as anyAnotherName

Note:请不要给任何可能与django库冲突的名字。

相关内容

  • 没有找到相关文章