Как проверить, присвоен ли объект другому объекту | Django

Я работаю над примером django, как показано ниже:
models.py

class Room(models.Model):
    name = models.CharField("Room No.",max_length=200)

    class Meta:
        verbose_name_plural = "Room"

    def __str__(self):
        return self.name

class Student(models.Model):
    name = models.CharField("name",max_length=200)
    father_name = models.CharField("father Name",max_length=200)
    cell_no = models.CharField("cell No",max_length=200)
    address = models.CharField("address",max_length=500)
    room = models.ForeignKey(Room, on_delete=models.CASCADE, null=True, blank=True, related_name='all_rooms')

    class Meta:
        verbose_name_plural = "Student"

    def __str__(self):
        return self.name

views.py

def room(request):
    allrooms= Room.objects.all()

    form = RoomForm(request.POST or None, request.FILES or None)

    if form.is_valid():
        form.save()
        messages.success(request, "Room added successfully.")
        return redirect('/room')
    context = {'allrooms':allrooms, 'form':form}
    return render(request, 'room.html', context)

В templates в room.html я хочу показать статус Vacant/Occupied на основании того, закреплена ли комната за каким-либо студентом или нет. У меня есть следующий код в шаблоне, но он показывает статус 'Vacant' для всех комнат.

<table id="example1" class="table table-bordered table-striped">
                  <thead>
                     <tr>
                        <th>Room</th>
                        <th class="text-center">Status</th>
                        <th class="text-center">Action</th>
                     </tr>
                  </thead>
                  <tbody>
                     {% for room in allrooms %}
                     <tr>
                        <td>{{ room.name }}</td>
                        <td class="text-center">
                           {% if room.student_set.all %}
                           <small class="badge badge-danger">Occupied</small>
                           {% elif not room.student.all %}
                           <small class="badge badge-success">Vacant</small>
                           {% endif %}
                        </td>
                        <td class="text-center"><a href="{% url 'updateroom' room.id %}"><i class="fas fa-edit"></i></a></td>
                     </tr>
                     {% endfor %}
                  </tbody>
               </table>

Пожалуйста, помогите кому-нибудь показать статус комнаты.

Для получения назначенных и неназначенных комнат необходимо написать запросы по связанному полю (в данном случае внешний ключ "all_rooms") следующим образом:

total_rooms = Room.objects.all().annotate(num_rooms=Count("all_rooms"))
assigned_rooms = total_rooms.filter(num_rooms__gt=0)
unassigned_rooms = total_rooms.exclude(num_rooms__gt=0)

При выполнении эти запросы вернут экземпляры комнат: room instances output

Вернуться на верх