django связи ForeignKey
всех приветствую, столкнулся с проблемой, рад буду любому совету. имеется 3 модели user -> компания -> транспорт, все они связаны ForeignKey. когда пользователь проходит аутентификацию ему предлагается зарегистрировать свою компанию, это уже реализовано, компания создается и в нее я вкладываю id пользователя а как в транспорт вложить id компании (именно той которую он создал ) и соответственно как в дальнейшем выводить пользователю транспортные средства которые принадлежат его компании. как все это делать с 1 связью я понимаю, сравнивать ключи и выводить в шаблон, а вот как работать с тремя связями...?
models.py
class clients(models.Model):
...
user = models.ForeignKey('auth.user', on_delete=models.SET_NULL, null = True, default = None)
...
class transport(models.Model):
...
id_client = models.ForeignKey('clients', on_delete=models.SET_NULL, null = True, default = None, blank = True)
...
во вью пытаюсь сделать что-то вроде этого
if request.method == 'POST':
form_ts = form_transport(request.POST, request.FILES)
if form_ts.is_valid():
instance = form_ts.save(commit=False)
instance.user = request.user
instance.client_id = clent.id(user=request.user.id)
instance.save()
done = 'ТС занесено успешно, продолжайте'
#return redirect('/transport')
else:
error = 'Проверьте форму!'
Ответы (2 шт):
Вы можете в вашу форму передавать пользоваться (request.user) или сами компании, чтобы ограничить выбор из всех компаний.
Примерно так:
class form_transport(...):
def __init__(self, *args, user=None, **kwargs):
super().__init__(*args, **kwargs)
company_field = self.fields.get('<поле выбора компании в форме>')
if user:
company_field.queryset = clients.objects.filter(user=user)
else:
compamy_field.queryset = clients.objects.none() # Чтобы нельзя было выбрать компанию другого юзера
и передавайте юзера во view
form = form_transport(request.POST, request.FILES, user=request.user)
Используйте это и ваш вопрос
соответственно как в дальнейшем выводить пользователю транспортные средства которые принадлежат его компании.
будет решен
PS: Если передавать сами компании - то нужно передавать QuerySet
ответ оказался слишком примитивным, возможно это кому-то поможет
создал переменную
q = clients.objects.filter(user=request.user.id)[0]
записал ее в поле
instance.client = q