У меня возникла проблема при обновлении таблицы поиска для отношения «многие ко многим» между этапом и устройством. Я не нашел ответа на свой вопрос, но я не знаю, как правильно его описать, поэтому извините, если я создал повторяющийся вопрос.
Вот что у меня есть (короче):
# models.py
class Parent(models.Model):
# other fields
name = models.CharField(max_length=255)
class Stage(models.Model):
# other fields
parent = models.ForeignKey('Parent', related_name='stage', on_delete=models.CASCADE)
desc = models.CharField(max_length=255)
device = models.ManyToManyField('Device', related_name='stg', blank=True)
class Device(models.Model):
# other fields
name = models.CharField(max_length=255)
# serializer
class ParentSerializer(serializers.ModelSerializer):
stages = serializers.SerializerMethodField()
class Meta:
model = Parent
fields = '__all__'
depth = 1
def get_stages(self, obj):
stg = Stage.objects.filter(parent=obj.id)
return StageSerializer(stg, many=True).data
# view.py
# In ParentCreate or ParentUpdate I try to update Stage manually
class ParentListCreate(generics.ListCreateAPIView):
serializer_class = ParentSerializer
model = Parent
queryset = Experiment.objects.all()
#after the Parent created we add new relationship between stage and device
def create(self, request, *args, **kwargs):
# after parent created I try to save existing Stage.
stage = request.data.get('stage', None)
stg = Stage.objects.get(id=stage["id"])
stg.name = stage["desc"]
stg.parent_id = parent_id
stg.save()
stg.device.add(Device.objects.get(id=s["device"]))
Поэтому я пытаюсь обновить отношение Stage-Device при создании Parent в views.py. Он создает связь между устройством и сценой, но проблема в том, что он продолжает добавлять новые строки в таблицу stage_device, сгенерированную Django.
Как я могу убедиться, что я обновляю старую строку stage_device вместо того, чтобы просто каждый раз создавать новую строку?
Любой вклад приветствуется!