[英]How to count and display objects in relation ManyToMany in Django
[英]How to read Objects from ManyToMany Relation class in django
我制作了一個名為朋友的課程,我想將用戶作為關注者聯系起來。 從這門課中,我無法讀取關注另一個用戶的用戶。 例如,如果“a”用戶流向“b”用戶。 然后我想從 b 的用戶 id 中獲取關注 b 的用戶的名稱,並將它們顯示為 a 的關注者。 此類也不存儲跟隨用戶和跟隨用戶的用戶 ID。 我是多對多關系領域的新手。 請幫忙。
Models.py 中的代碼
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.ForeignKey(User, related_name='follower', null=True,on_delete=models.CASCADE)
@classmethod
def make_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user = current_user
)
friend.users.add(new_friend)
它在 views.py 中的功能是
def change_friends(request, operation, pk):
friend = User.objects.get(pk=pk)
if operation == 'add':
Friend.make_friend(request.user, friend)
elif operation == 'remove':
Friend.lose_friend(request.user, friend)
return redirect('home')
它在 urls.py 中的 url 是
path('connect/<operation>/<pk>)',views.change_friends, name='change_friends')
在您的方法中,您不會保存您的修改。
當您執行friend.make_friend(...)
,之后您應該保存您的friend
對象: friend.save()
,因此也可以保存m2m
字段。
更新Friend
對象的users
字段的其他方法也是如此。
您可以創建 自定義用戶模型,在其中定義多對多關系,而不是創建朋友模型。 如果您定義ManyToManyField
與symmetrical=False
那么它不會是對稱的
class CustomUser(AbstractUser):
friends = models.ManyToManyField('self', symmetrical=False, related_name='followers')
您需要在設置中將此模型定義為您的用戶模型
AUTH_USER_MODEL = 'you_app.CustomUser'
現在您可以直接從用戶實例本身使用這種關系
def change_friends(request, operation, pk):
friend = CustomUser.objects.get(pk=pk)
if operation == 'add':
request.user.friends.add(friend)
elif operation == 'remove':
request.user.friends.remove(friend)
return redirect('home')
現在您的CustomUser
實例將有 2 個可以查詢的關系
request.user.friends.all()
request.user.followers.all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.