Сохранение FK при отправке сообщения в django

Здравствуйте, у меня проблема с сохранением fk в таблице Infringer при добавлении записи. Я пытаюсь сохранить ID клиента при добавлении записи. Для устранения неполадок я добавил несколько строк печати и вот что получилось. Как вы можете видеть ниже, правильный ID клиента присутствует, но клиента нет, поэтому он не сохраняется в записи. Другие поля сохраняются нормально. ПОЖАЛУЙСТА, ПОМОГИТЕ! Я новичок.

customer в файле forms.py равен 2

экземпляр forms.py был сохранен с клиентом None

customer в файле views.py равен 2

Удалось сохранить нарушителя в файле views.py с его клиентом None

views.py

@login_required(login_url='login') def createInfringer(request):
customer=request.user.customer
form = InfringerForm(customer=customer)
if request.method == 'POST':
    customer=request.user.customer.id
   
    form = InfringerForm(customer, request.POST)
    if form.is_valid():   
        saved_instance = form.save(customer)
        print (f'customer in views.py is {customer}')
        print (f'Successfully saved the infringer in views.py with its customer {saved_instance.customer}')
        

    return redirect('infringer-list')

context ={'form': form}
return render (request, 'base/infringement_form.html', context)

forms.py

class InfringerForm(ModelForm):
   class Meta:
   model = Infringer
   fields = ['name', 'brand_name','status']  

def __init__(self, customer, *args, **kwargs):
    super(InfringerForm,self).__init__(*args, **kwargs)
    
    self.fields['status'].queryset = Status.objects.filter(customer=customer)

def save(self, customer, *args, **kwargs):
    instance = super(InfringerForm, self).save( *args, **kwargs) 
    if customer:
        print (f'customer in forms.py is {customer}')
        self.customer = customer
    
    instance.save()
    
    print (f' forms.py instance was saved with the customer {instance.customer}')
    return instance

Возможно, стоит упростить форму, например, так:

class InfringerForm(ModelForm):
   class Meta:
       model = Infringer
       fields = ['name', 'brand_name', 'status']  

    def __init__(self, customer, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.customer = customer
        self.fields['status'].queryset = Status.objects.filter(customer=customer)

    def save(self, *args, **kwargs):
        self.instance.customer = self.customer
        return super().save( *args, **kwargs)

После этого мы можем упростить логику представления до:

@login_required(login_url='login')
def createInfringer(request):
    customer = request.user.customer
    form = InfringerForm(customer=customer)
    if request.method == 'POST':
        form = InfringerForm(customer, request.POST, request.FILES)
        if form.is_valid():   
            saved_instance = form.save()
            print (f'customer in views.py is {customer}')
            print (f'Successfully saved the infringer in views.py with its customer {saved_instance.customer}')
            return redirect('infringer-list')

    return render (request, 'base/infringement_form.html', {'form': form})

Таким образом, мы используем клиента, а не его первичный ключ, и нам больше не нужно передавать клиента в метод .save().

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