Django TypeError: получен неожиданный аргумент ключевого слова 'model_name'

При кодировании сигнала в Django я получаю TypeError: получен неожиданный аргумент ключевого слова 'model_name'. Судя по коду, я ожидал получить функцию 'Payment_record', срабатывающую при совершении 'Payment'. Вот код

models.py

class Payment(models.Model):
    paid_by = models.CharField(max_length=200)
    student_name = models.ForeignKey(Student, on_delete=models.CASCADE)
    payable_towards = models.CharField(max_length=200, choices = payable_towards, default = "tuition_fee")
    payment_date =  models.DateTimeField(default=timezone.now)
    amount_paid = models.IntegerField(blank=False, null=True)
    account_name = models.ForeignKey(Account, on_delete=models.CASCADE, default=70)
    receipt_number = models.IntegerField(blank=False, null=True, unique=True)
    name = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="pay_received_by",)

    def __str__(self):
        return str(self.student_name)

# signal to add payment to account
class Payment_record(models.Model):
    payment_date = models.DateTimeField(default=timezone.now)
    student_name = models.ForeignKey(Payment, on_delete=models.CASCADE, related_name="pay_date_record",)
    balance = models.IntegerField(blank=False, null=True)
    # record_history =
    payment_status = models.CharField(max_length=200, choices = payment_status, default = "underpaid")

    def __str__(self):
        return str(self.student_name)

..................................... apps.py

from django.apps import AppConfig


class FinancesConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'finances'
    
    def ready(self):
        import finances.signals

...................................... signals.py

from .models import Payment_record, Payment
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Payment)
def create_payment_record(sender, instance, created, **kwargs):
    if created:
        Payment_record.objects.create(Payment=instance)

@receiver(post_save, sender=Payment)
def save_payment_record(sender, instance, **kwargs):
    instance.Payment_record.save

......................................

Я также приложил скриншоты для вышеуказанных фрагментов кода.

В чем может быть проблема и как ее решить? Или лучше, имея 2 модели, как я могу создать сигнал? enter image description here

enter image description here

Согласно вашим моделям это должно быть:

student_name = models.ForeignKey(Payment, on_delete=models.CASCADE, related_name="pay_date_record",)

@receiver(post_save, sender=Payment)
def create_payment_record(sender, instance, created, **kwargs):
    if created:
        Payment_record.objects.create(student_name=instance)

Думаю, у вас проблема с именем поля Payment ForeignKey.

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