Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Models
- class Purchaser(models.Model):
- name = models.CharField(max_length=50, blank=True, null=True)
- phone = models.CharField(max_length=20, blank=True, null=True)
- email = models.EmailField(max_length=255, blank=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
- # Serializers
- class purchaserSerializer(serializers.ModelSerializer):
- phone = serializers.StringRelatedField(read_only=True)
- email = serializers.StringRelatedField(read_only=True)
- image = serializers.StringRelatedField(read_only=True)
- data_added = serializers.StringRelatedField(read_only=True)
- class Meta:
- model = Purchaser
- fields = ('id', 'name', 'phone', 'email', 'image', 'data_added')
- class paymentInvoiceSerializer(serializers.ModelSerializer):
- invoiceOwner = purchaserSerializer(many=False)
- class Meta:
- model = paymentInvoice
- fields = '__all__'
- def create(self, validated_data):
- purchaser_data = validated_data.pop("invoiceOwner")
- purchaser = Purchaser.objects.create(**purchaser_data)
- return paymentInvoice.objects.create(**validated_data)
- # views
- class paymentInvoiceListCreateView(ListCreateAPIView):
- serializer_class = paymentInvoiceSerializer
- queryset = paymentInvoice.objects.all().order_by('-date')
- # POST data to Postman
- {
- "invoiceOwner": {"name":"Becky"},
- "product": "Lix",
- "mode": "Mpesa",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 3000
- }
- # GET data request from postman
- {
- "count": 8,
- "next": null,
- "previous": null,
- "results": [
- {
- "id": 1,
- "invoiceOwner": "Martin",
- "invoiceNo": "INV-0001",
- "product": "",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 0
- },
- {
- "id": 2,
- "invoiceOwner": "Becky",
- "invoiceNo": "INV-0002",
- "product": "",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 0
- },
- {
- "id": 3,
- "invoiceOwner": "Maggy",
- "invoiceNo": "INV-0003",
- "product": "",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 0
- },
- {
- "id": 4,
- "invoiceOwner": "Martin",
- "invoiceNo": "INV-0004",
- "product": "Cerrazzo",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Paid",
- "payment_made": 2
- },
- {
- "id": 5,
- "invoiceOwner": "Maggy",
- "invoiceNo": "INV-0005",
- "product": "Sepit",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Paid",
- "payment_made": 2000
- },
- {
- "id": 11,
- "invoiceOwner": null,
- "invoiceNo": "INV-0006",
- "product": "Lix",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 3000
- },
- {
- "id": 12,
- "invoiceOwner": null,
- "invoiceNo": "INV-0007",
- "product": "Lix",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 3000
- },
- {
- "id": 13,
- "invoiceOwner": null,
- "invoiceNo": "INV-0008",
- "product": "Lix",
- "mode": "Mpesa",
- "date": "2020-08-04",
- "quantity": 1,
- "status": "Pending",
- "payment_made": 0
- }
- ]
- }
Add Comment
Please, Sign In to add comment