【问题标题】:Django. How do I add a field to a query?姜戈。如何向查询中添加字段?
【发布时间】:2021-03-10 00:29:46
【问题描述】:

我有一个 Room 模型,我想将 is_member 布尔字段添加到带有房间的查询集中。我怎样才能做到这一点?我正在考虑使用.annotate (),但这对我的任务不起作用。

models.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

【问题讨论】:

  • 您希望首先使用查询集得到什么
  • 我想用 "is_member" = True or False 序列化房间

标签: python python-3.x django django-queryset


【解决方案1】:

你可以试试这个:

创建一个名为 Profile 的模型并向其中添加 is_member 字段。

models.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()

【讨论】:

  • 对不起。我写了“user.is_member = is_member”而不是“room.is_member = is_member”。我已经在我的提问中更新了这一行。
猜你喜欢
  • 2021-03-14
  • 2014-09-20
  • 1970-01-01
  • 2011-12-24
  • 2021-01-13
  • 2013-02-22
  • 1970-01-01
  • 2020-08-05
  • 2016-05-02
相关资源
最近更新 更多