django AttributeError,类型object'object'没有属性python 3

Dic*_*mbo 1 django django-models django-views

发布数据时出错

AttributeError at /system/create/
type object 'object' has no attribute 'EmpInstallment'
Request Method: POST
Request URL:    http://127.0.0.1:8000/system/create/
Django Version: 1.11.2
Exception Type: AttributeError
Exception Value:    
type object 'object' has no attribute 'EmpInstallment'
Exception Location: /Users/wakanda/pyproject/payroll/system/views.py in form_valid, line 117
Python Executable:  /Users/wakanda/py-virtualenv/payroll3/bin/python
Python Version: 3.6.5
Python Path:    
['/Users/wakanda/pyproject/payroll',
 '/Users/wakanda/py-virtualenv/payroll3/lib/python36.zip',
 '/Users/wakanda/py-virtualenv/payroll3/lib/python3.6',
 '/Users/wakanda/py-virtualenv/payroll3/lib/python3.6/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
 '/Users/wakanda/py-virtualenv/payroll3/lib/python3.6/site-packages',
 '/Users/wakanda/py-virtualenv/payroll3/lib/python3.6/site-packages/setuptools-39.0.1-py3.6.egg',
 '/Users/wakanda/py-virtualenv/payroll3/lib/python3.6/site-packages/configparser-3.5.0-py3.6.egg']
Run Code Online (Sandbox Code Playgroud)

模型

class Employee(models.Model):
    nik = models.CharField(max_length=100)
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("system:detail",kwargs={'pk':self.pk})

class EmpLoan(models.Model):
    status = models.BooleanField()
    nominal = models.DecimalField(max_digits=10, decimal_places=0)
    emp = models.ForeignKey(Employee, related_name='emploan')
    created_at = models.DateTimeField(auto_now=True)
    updated_at = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.emp.name

class EmpInstallment(models.Model):
    nominal = models.DecimalField(max_digits=10, decimal_places=0)
    loan = models.ForeignKey(EmpLoan, related_name='empinstallment')
    created_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.loan.emp.name
Run Code Online (Sandbox Code Playgroud)

view.py

class EmployeeCreateView(CreateView):
    fields = ('spl', 'status')
    model = models.Employee

    def form_valid(self, form):
        self.object = form.save(commit=False)

        try:
            pinjaman = models.EmpLoan.objects.get(emp_id=1, status=0)
            cicilans = models.EmpInstallment.objects.filter(loan_id=pinjaman.id).values_list('id', flat=True)
            totalcicilan = 0
            for i in cicilans:
                cicilan = models.EmpInstallment.objects.get(id=i).nominal
                totalcicilan = totalcicilan + cicilan

            sisapinjaman = pinjaman.nominal - totalcicilan

            if ( 12 - cicilans.count()) != 0:
                cicilansekarang = sisapinjaman / ( 12 - cicilans.count())
            else:
                cicilansekarang = 0

            #potongan cicilan
            hasil = round(cicilansekarang)

            if hasil != 0:
                joe = models.EmpInstallment.objects.create(loan=pinjaman, nominal=hasil)
                object.EmpInstallment.add(joe)
            else:
                statatus_pinjaman = models.EmpLoan.objects.get(emp_id=1, status=0)
                statatus_pinjaman.status = 1
                statatus_pinjaman.save()

        except models.EmpLoan.DoesNotExist:
            hasil = 0

        return super(ModelFormMixin, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

当我单击表单上的提交时,它显示错误,但在数据库中检查了它是否已提交。

我的代码有什么问题吗?

特别是在

joe = models.EmpInstallment.objects.create(loan=pinjaman, nominal=hasil)
object.EmpInstallment.add(joe)
Run Code Online (Sandbox Code Playgroud)

请说明一下,因为我是Django&OOP的学习者和超级菜鸟。

nev*_*ner 5

object是Python的buitin。我想您需要使用self object

self.object.EmpInstallment.add(joe)
Run Code Online (Sandbox Code Playgroud)