Как скопировать данные из модели в другую модель в 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