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 модели, как я могу создать сигнал?
Согласно вашим моделям это должно быть:
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.