Я предполагаю, что вы используете формы для создания команды.
Нет прямого способа создать экземпляр TeamMember
без текущего пользователя (через request
).request
доступен только в представлениях (если вы не используете для этого специальное промежуточное ПО или стороннюю библиотеку), поэтому мы можем отправить его форму и создать пользователя, переопределив метод save
формы модели.
Таким образом, вы можете попробовать вот так:
# Override the model form's save method to create related object
class TeamForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(TeamForm, self).__init__(*args, **kwargs)
class Meta:
model = Team
def save(self, **kwargs):
user = self.request.user
instance = super(TeamForm, self).save(**kwargs)
TeamUser.objects.create(team=instance, user=user)
return instance
И использовать эту форму в представлении:
# Update get_form_kwargs methods in create view
class TeamCreateView(CreateView):
form_class = TeamForm
template = 'your_template.html'
def get_form_kwargs(self):
kw = super(TeamCreateView, self).get_form_kwargs()
kw['request'] = self.request
return kw
Обновление
( из комментариев )Если у вас есть пользовательский FK, доступный в Team
, вы можете использовать его для создания TeamMember, переопределив метод save
.Попробуйте вот так:
class Team(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL)
name = models.CharField(max_length=55)
def save(self, *args, **kwargs): # <-- Override
instance = super(Team, self).save(*args, **kwargs)
TeamMember.objects.create(user=instance.user, team=instance)
return instance