Есть ли лучший способ обновить все строки отношения с отношением `ForegnKey` в `Django ORM`.
У меня есть две модели, одна из которых выглядит так:
class PhysicalSensor(models.Model):
name = models.CharField(unique=True, max_length=255)
def __str__(self) -> str:
return self.name
class Sensor(models.Model):
physical_sensor = models.ForeignKey(PhysicalSensor, on_delete=models.RESTRICT, null=True, blank=True)
Итак, когда я хочу добавить PhisycalSensor
запись, я хочу установить Sensor
записи на нее.
Сейчас я делаю это в классе Serializer
:
class PhysicalSensorSerializer(ModelSerializer):
sensors = SensorSerialiazer(required=False, many=True)
class Meta:
fields = ("__all__")
model = PhysicalSensor
def create(self, validated_data):
sensors = validated_data.pop("sensors")
ph_sensor = super().create(validated_data)
for sensor in sensors:
s = Sensor.objects.get(sensor["id"])
s.physical_sensor = ph_sensor
s.save()
и для редактирования PhysicalSensor
я использую то же самое в методе .update()
моего Serializer
.
Есть ли какой-нибудь бестелесный способ сделать это или лучшая практика для этого?
Лучше всего использовать метод queryset.update
:
def create(self, validated_data):
sensors = validated_data.pop("sensors")
ph_sensor = super().create(validated_data)
ids = (sensor["id"] for sensor in sensors)
Sensor.objects.filter(pk__in = ids).update(physical_sensor=ph_sensor)
больше здесь: https://docs.djangoproject.com/en/5.0/ref/models/querysets/#update