take the logged-in user and save the id using inline formset

Asked

Viewed 457 times

0

Hello I’m having a problem to get the logged in user id simplifying, I have a form where the user will enter the information and when he gives the Ubmit the user will also be saved together, because I will need the user because the system will distribute this form across several sectors

my . models

class Solicitacao(models.Model):
dt_emissao = models.DateTimeField(auto_now_add=True)
dt_entrega = models.DateTimeField(blank=True, null=True)
local_entrega = models.CharField(max_length=80)
motivacao = models.TextField()
solicitante = models.ForeignKey(Solicitante)
setor_nome = models.ForeignKey(OrgaoSetor)
autorizacao = models.ForeignKey(Autorizacao)
usuarios = models.ForeignKey(User, blank=True, null=False)


def __str__(self):
    return self.motivacao

class Meta:
    verbose_name = 'Solicitacao'
    verbose_name_plural = 'Solicitacoes'

class Servico(models.Model):
id_solicitacao = models.ForeignKey(Solicitacao)
qtde = models.CharField(max_length=10, blank=True, null=True)
unidade = models.CharField(max_length=10, blank=True, null=True)
c_Custo = models.CharField(max_length=10, blank=True, null=True)
descricao = models.CharField(max_length=100000, blank=True, null=True)

def __str__(self):
    return self.descricao

class Meta:
    verbose_name = 'Servico'
    verbose_name_plural = 'Servicos'

my .

class SolicitacaoForm(forms.ModelForm):

class Meta:
    model = Solicitacao
    fields = ['setor_nome',
    'solicitante',
    'motivacao',
    'dt_entrega',
    'local_entrega',
    'autorizacao',
    'usuarios']

class ServicoForm(forms.ModelForm): 

class Meta:
    model = Servico
    exclude = ()  

ServicoFormSet = inlineformset_factory(Solicitacao, Servico,fields('qtde', 'unidade', 'c_Custo', 'descricao'),extra=1)

and my views

class SolicitacaoServicoCreate(CreateView):
model = Solicitacao
template_name = 'Servico_create.html'
fields = ['setor_nome', 'solicitante', 'motivacao', 'dt_entrega', 'local_entrega', 'autorizacao', 'usuarios']
success_url = reverse_lazy ('home')

def get_context_data(self, **kwargs):
    data = super(SolicitacaoServicoCreate, self).get_context_data(**kwargs)
    if self.request.POST:
        data['servico'] = ServicoFormSet(self.request.POST)
    else:
        data['servico'] = ServicoFormSet()
    return data 

def form_valid(self, form):
    context = self.get_context_data()
    servico = context['servico']
    form.instance.servico = self.request.user
    with transaction.atomic():
        if form.is_valid():
            form.usuarios = self.request.user     
            self.object = form.save()
        if servico.is_valid():
            servico.instance = self.object
            servico.save()
    return super(SolicitacaoServicoCreate, self).form_valid(form)

1 answer

0


solution is to pass the object

self.object = form.save(commit=False)
            self.object.usuarios = self.request.user
            self.object.save()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.