Django REST framework - Редактирование данных, если такая запись есть, создание - если нет
Я новичок в DRF, пишу api для последующего использования в Vue.js . Помогите разобраться, как сделать так, чтобы при добавлении номенклатуры он проверял есть ли она, и если есть, то редактировал количество путем добавления к предыдущему количеству.
Меня также интересует вопрос, каким образом при добавлении изменений в номенклатуру, количество занятых позиций вычиталось из текущего количества номенклатуры.
Возможно ли это сделать с помощью DRF или это можно реализовать в Vue.js, проверяя и отправляя POST/PUT запросы в зависимости от того, есть или нет?
<class Nomenclature(models.Model):
nameNom = models.CharField(max_length=150,verbose_name = "Название номеклатуры")
numNom = models.CharField(max_length=50,verbose_name = "Номер номеклатуры",primary_key=True)
quantity = models.IntegerField(verbose_name="Количество")
numPolk = models.CharField(max_length=150,verbose_name = "Номер полки/места")
class Changes(models.Model):
numNomenclature = models.ForeignKey(Nomenclature, on_delete=models.CASCADE,related_name="chamges")
quantity = models.IntegerField(verbose_name="Количество")
location = models.CharField(max_length=50,verbose_name = "Место установки")
fullname = models.CharField(max_length=150,verbose_name = "ФИО")
appointment = models.CharField(max_length=50,verbose_name = "Назначение")
def __str__(self):
return '%s: %d,%s,%s' % ( self.fullname,self.quantity, self.location, self.appointment)
Мой serializers.py
class CheckSerializer(serializers.ModelSerializer):
class Meta:
model = Changes
fields = '__all__'
class NumSerializer(serializers.ModelSerializer):
chamges = serializers.StringRelatedField(many=True)
class Meta:
model = Nomenclature
fields = ('numNom','nameNom','quantity','numPolk','chamges')
Мой views.py:
class CreateNumList(ModelViewSet):
queryset = Nomenclature.objects.all()
serializer_class = serializers.NumSerializer
Выходы в такой форме:
[
{
"numNom": "SG-00000159",
"nameNom": "Engine",
"quantity": 16,
"numPolk": "17",
"chamges": [
"Antonov: 1,Car,Exploitation",
"Ivanov: 1,Car,Exploitation"
]
}
]
вы можете использовать django get_or_create
читайте больше здесь например
obj, created = Nomenclature.objects.get_or_create(
nameNom='some name')