简体   繁体   中英

Django. How do I add a field to a query?

I have a Room model and I want to add the is_member boolean field to a queryset with rooms. How can i do this? I was thinking of using .annotate () , but that doesn't work for my task.

models.py

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

I present the solution like this:

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

Help me please

Update! Sorry. I wrote user.is_member = is_member instead of room.is_member = is_member

You can try this:

Create a model called Profile and add the is_member field to it.

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)

And use Profile for member field as ForeignKey instead of User .

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

And then set the is_member field of the Profile object to True or False accordingly. see below code:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM