У меня две модели Purchaser
и paymentInvoice
, я хочу убедиться, что я не создаю дубликат Purchaser
объекта, когда я создаю новый paymentInvoice
для того же Purchaser
индивидуального / экземпляра .
Обычно у меня есть Purchaser
с именем Becky , поэтому, когда я хочу создать счет для Becky 1st, я хочу убедиться, что имя Becky существует в Purchaser
, если это так, создайте объект paymentInvoice
с Becky , заняв поле invoiceOwner
. Если Becky не существует в Purchaser
, создайте экземпляр этого покупателя в Purchaser
, затем используйте это имя экземпляра для создания объекта paymentInvoice
.
Модели файл
class Purchaser(models.Model):
name = models.CharField(max_length=50)
phone = models.CharField(max_length=20)
email = models.EmailField(max_length=255, blank=True, null=True)
image = models.ImageField(default='default.png', upload_to='customer_photos/%Y/%m/%d/')
data_added = models.DateField(default=datetime.date.today)
def __str__(self):
return self.name
class paymentInvoice(models.Model):
invoiceNo = models.CharField(max_length=50, unique=True, default=increment_invoice_number)
invoiceOwner = models.ForeignKey(Purchaser, on_delete=models.CASCADE, related_name="invoice_detail")
product = models.CharField(max_length=50, blank=True)
date = models.DateField(default=datetime.date.today)
quantity = models.PositiveSmallIntegerField(blank=True, default=1)
payment_made = models.IntegerField(default=0)
def __str__(self):
return self.invoiceOwner.name
Сериализаторы файл
class paymentInvoiceSerializer(serializers.ModelSerializer):
invoiceOwner = purchaserSerializer(many=False)
invoiceOwner = serializers.CharField(source='invoiceOwner.name')
class Meta:
model = paymentInvoice
fields = '__all__'
def create(self, validated_data):
purchaser_data = validated_data.pop("invoiceOwner")
purchaser, _ = Purchaser.objects.get_or_create(**purchaser_data).first()
validated_data.update({"invoiceOwner": purchaser})
return paymentInvoice.objects.create(**validated_data)
Просмотры файл
class PurchaserListCreateView(ListCreateAPIView):
serializer_class = purchaserSerializer
queryset = Purchaser.objects.all()
class paymentInvoiceListCreateView(ListCreateAPIView):
serializer_class = paymentInvoiceSerializer
queryset = paymentInvoice.objects.all().order_by('-date')
POST запрос в Postman для модели paymentInvoice
{
"invoiceOwner":"Becky",
"product": "Lix",
"quantity": 1,
"payment_made": 3000
}
Мой способ не работает, я получаю сообщение об ошибке от PostMan
MultipleObjectsReturned at / api / clients / invoice / get () вернул более одного покупателя - он вернул 2!