Reputation: 65
class AdvancePaymentCreateSerializer(serializers.ModelSerializer):
PAYMENT_MODE = (
("cash", "Cash"),
("cheque", "Cheque"),
("upi", "UPI"),
("imps", "IMPS"),
("neft", "NEFT"),
("rtgs", "RTGS"),
("demand_draft", "Demand Draft"),
)
STATUS = (
("pending", "Pending"),
("hold", "Hold"),
("completed", "Completed"),
("canceled", "Canceled"),
)
center = serializers.PrimaryKeyRelatedField(queryset=center_models.Centers.objects.all(), many=True)
payment_date = serializers.DateField(required=False, allow_null=True)
amount = serializers.FloatField(required=False, allow_null=True)
payment_mode = serializers.ChoiceField(choices=PAYMENT_MODE)
cash_receipt_no = serializers.CharField(max_length=100, required=False, allow_null=True)
invoice_no = serializers.CharField(max_length=100, required=False, allow_null=True)
remarks = serializers.CharField(max_length=255, required=False, allow_null=True)
status = serializers.ChoiceField(choices=STATUS)
center_balance = serializers.FloatField(required=False, allow_null=True)
payment_receipt = serializers.FileField(required=False, allow_null=True, allow_empty_file=False,
use_url=True)
is_active = serializers.BooleanField(default=True)
class Meta:
model = package_models.AdvancePayment
fields = "__all__"
def create(self, validated_data):
center = validated_data.get("centre")
payment_date = validated_data.get("payment_date")
amount = validated_data.get("amount")
payment_mode = validated_data.get("payment_mode")
cash_receipt_no = validated_data.get("cash_receipt_no")
invoice_no = validated_data.get("invoice_no")
remarks = validated_data.get("remarks")
status = validated_data.get("status")
center_balance = validated_data.get("center_balance")
payment_receipt = validated_data.get("payment_receipt")
is_active = validated_data.get("is_active")
obj = package_models.AdvancePayment.objects.create(
center=center,
payment_date=payment_date,
amount=amount,
payment_mode=payment_mode,
cash_receipt_no=cash_receipt_no,
invoice_no=invoice_no,
remarks = remarks,
status = status,
center_balance = center_balance,
payment_receipt = payment_receipt,
is_active = is_active
)
ledger = package_models.CollectionCenterLedger(
ledger_type="credit",
amount=amount,
center_id=center,
remarks="Advanced Amount by Center"
).save()
center=center_models.Centers.objects.get_or_create(id=center).first()
center.rcl_amount =float(center.rcl_amount) + float(amount)
center.save()
obj.center_balance =center.rcl_amount
obj.save()
ledger.center_rem_balance=center.rcl_amount
ledger.save()
obj.save()
return obj
This is create serializer of AdvancePayment Model. While creating object in this model i also want to save data in CollectionCenterLedger Model.But while doing this the data is not getting saved in that model. Why the following part is not working?
ledger = package_models.CollectionCenterLedger(
ledger_type="credit",
amount=amount,
center_id=center,
remarks="Advanced Amount by Center"
).save()
What is wrong i am doing here? I'm new in Django Rest Framework. Any help would be really appreciated. Thank you !!
CollectionCenterLedger Model:
class CollectionCenterLedger(core_models.TimestampedModel):
TYPE = (
("debit", "debit"),
("credit", "credit"),
)
STATUS = (
("completed", "Completed"),
("canceled", "Canceled"),
("deleted", "deleted"),
("hold", "hold"),
)
center = models.ForeignKey(center_models.Centers, on_delete=models.CASCADE)
booking = models.ForeignKey('booking.Booking', on_delete=models.CASCADE, null=True, blank=True)
add_booking = models.ForeignKey('booking.AdditionalMemberBooking', on_delete=models.CASCADE,related_name='add_booking_ledger', null=True, blank=True)
amount = models.FloatField(null=True, blank=True, default=0)
package = models.ForeignKey(Package,on_delete=models.CASCADE,null=True, blank=True,related_name='order_package')
rcl_share = models.FloatField(null=True, blank=True)
client_discount_percentage = models.CharField(max_length=50,null=True, blank=True)
client_share = models.FloatField(null=True, blank=True)
center_rem_balance = models.FloatField(null=True, blank=True)
ledger_type = models.CharField(max_length=20, choices=TYPE)
ledger_date = models.DateTimeField(auto_now_add=True)
remarks = models.CharField(max_length=200, null=True, blank=True)
status = models.CharField(max_length=20, choices=STATUS, default="completed")
Upvotes: 0
Views: 28
Reputation: 6378
You cannot assign variable to save()
function, because it does not return the object. Try changing it to that:
ledger = package_models.CollectionCenterLedger(
ledger_type="credit",
amount=amount,
center_id=center,
remarks="Advanced Amount by Center"
)
ledger.save()
Also, this is going to get you tuple with object and info if it was created, not QuerySet, you can't call first()
in here, you should change it to [0] to get object.
center=center_models.Centers.objects.get_or_create(id=center).first() # bad
center=center_models.Centers.objects.get_or_create(id=center)[0] # good
It's strange you didn't get an error from it.
Upvotes: 1