德扬戈。如何向查询中添加字段?

2024-04-19 17:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个房间模型,我想将is_member布尔字段添加到带有房间的查询集。我该怎么做?我曾想过使用.annotate (),但这对我的任务不起作用

型号.py

class Room(models.Model):
    name = models.CharField(max_length=150)
    members = models.ManyToManyField(User, blank=True)

我这样介绍解决方案:

rooms = Room.objects.all()
user = request.user
for room in rooms:
    members = room.members.all()
    is_member = user in members
    room.is_member = is_member # <- edited line

请帮帮我

更新对不起。我写了user.is_member = is_member而不是room.is_member = is_member


Tags: inpy模型ismodelsallmemberroom
1条回答
网友
1楼 · 发布于 2024-04-19 17:14:33

您可以尝试以下方法:

创建一个名为Profile的模型,并将is_成员字段添加到其中

型号.py

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_profile')
    is_member = models.BooleanField(default=False)

并使用Profile作为ForeignKey而不是User作为成员字段

class Room(models.Model):
    name = models.CharField(max_length=150)
    member = models.ForeignKey(User, blank=True)

然后将Profile对象的is_member字段相应地设置为True或False。见以下代码:

user = Profile.objects.get(user=request.user)
user.is_member = Room.objects.filter(member=user).exists()

相关问题 更多 >