Как скопировать данные из модели в другую модель в Django после фильтрации?

вот модели:

class Rooms(models.Model):
    
    name=models.CharField(max_length=100)
    image=models.URLField()
    max_person=models.CharField(max_length=100)
    office=models.CharField(max_length=200)
    status=models.CharField(max_length=200)
    cost=models.CharField(null=True,max_length=250)
    roomId=models.CharField(max_length=100,null=True)
    Address= models.CharField(max_length=100,null=True)
    def __str__(self):
        return str(self.name)
    

class Available_Rooms(models.Model):
    users=models.ForeignKey(Rooms,on_delete=models.CASCADE)
    name=models.CharField(max_length=100)
    image=models.URLField()
    max_person=models.CharField(max_length=100)
    office=models.CharField(max_length=200)
    status=models.CharField(max_length=200)
    cost=models.CharField(null=True,max_length=250)
    roomId=models.CharField(max_length=100,null=True)
    Address= models.CharField(max_length=100,null=True)
    def __str__(self):
        return str(self.name)

в модели "rooms" имеется 100 объектов (комнат)

и то, что я хочу отфильтровать его и перечислить комнаты, которые имеют maxperson = 4

availablity= Rooms.objects.filter(maxperson="4").all()

и хотим скопировать данные номера в другую модель "Available_Rooms"

есть идеи, как это можно сделать? большое спасибо заранее

и хотим скопировать детали комнат в другую модель Available_Rooms.

Пожалуйста, не: это бессмысленно: вы вводите дублирование данных, что является антипаттерном. Это означает, что если вы захотите изменить, например, name в Room, вам придется изменить и Rooms, и Available_Rooms. Это введет много дополнительной логики для синхронизации комнат.

Например, вы можете добавить BooleanField, который определяет, свободна ли комната, с:

class Room(models.Model):
    name = models.CharField(max_length=100)
    image = models.URLField()
    max_person = models.IntegerField()
    office = models.CharField(max_length=200)
    status = models.CharField(max_length=200)
    cost = models.IntegerField(null=True)
    room_id = models.CharField(max_length=100,null=True)
    address = models.CharField(max_length=100)
    available = models.BooleanField(default=False)
    
    def __str__(self):
        return str(self.name)

Тогда вы можете, например, сделать доступными все комнаты, которые имеют max_person=4 с:

Room.objects.filter(max_person=4).update(available=True)

Примечание: обычно модели Django дается сингулярное имя, поэтому Room вместо Rooms.


Примечание: обычно имена полей в модели Django записываются в snake_case, а не PascalCase, поэтому должно быть: room_id вместо roomId.

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