簡體   English   中英

如何從 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字段的其他方法也是如此。

您可以創建 自定義用戶模型,在其中定義多對多關系,而不是創建朋友模型。 如果您定義ManyToManyFieldsymmetrical=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM