Почему данные не сохраняются в другой модели?

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

Это создание сериализатора модели AdvancePayment. При создании объекта в этой модели я также хочу сохранить данные в модели CollectionCenterLedger. Но при этом данные не сохраняются в этой модели. Почему следующая часть не работает?

ledger = package_models.CollectionCenterLedger(
    ledger_type="credit",
    amount=amount,
    center_id=center,
    remarks="Advanced Amount by Center"
).save()

Что я делаю не так? Я новичок в Django Rest Framework. Любая помощь будет очень признательна. Спасибо!!!

Вы не можете присвоить переменную функции save(), потому что она не возвращает объект. Попробуйте изменить ее на такую:

ledger = package_models.CollectionCenterLedger(
    ledger_type="credit",
    amount=amount,
    center_id=center,
    remarks="Advanced Amount by Center"
)
ledger.save()

Кроме того, это даст вам кортеж с объектом и информацией, если он был создан, а не QuerySet, вы не можете вызвать first() здесь, вы должны изменить его на [0], чтобы получить объект.

center=center_models.Centers.objects.get_or_create(id=center).first()  # bad

center=center_models.Centers.objects.get_or_create(id=center)[0]       # good

Странно, что вы не получили от него ошибку.

Вернуться на верх