Почему данные не сохраняются в другой модели?
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
Странно, что вы не получили от него ошибку.