в первую очередь это должно происходить на уровне, когда вы знаете, кто является текущим пользователем.
В Django нет ничего похожего на глобальный request.user, поэтому вам нужно проверить это там, где у вас есть объект запроса, или передать его в качестве параметра.
Один из способов добиться того, о чем вы просите, - использовать собственный менеджер. Для класса Car вы можете использовать
class CarManager(models.Manager):
def for_user(self, user):
return super(CarManager, self).get_query_set().filter(creator=user)
Возможно, вы захотите переопределить менеджер по умолчанию, а его методы по умолчанию разрешают только этот метод.
Во второй части вам не нужно изменять конструктор, есть другие способы, если вам это не нравится. Но их изменение гарантирует, что, например, вы не сможете создать форму без зарегистрированного пользователя. Другой способ - использовать ModelChoiceField и переопределить его атрибут набора запросов в представлении:
form.car.queryset = Car.objects.for_user(request.user)
но этот подход подвержен ошибкам. Вам следует изменить конструктор формы следующим образом:
class PartForm(forms.ModelForm):
def __init__(self,user,*args,**kwargs):
super (PartForm,self ).__init__(*args,**kwargs)
self.fields['car'].queryset = Car.objects.for_user(user)
Надеюсь, это поможет.