如标题中所述,我的表单集仅保存第一个传递的“值”。用户添加的表单没有在数据库中保存其值。
models.py
class Solicitacao(models.Model):
ROLE_CHOICES = (
(1, 'Aberta'),
(2, 'Fechada'),
)
aberta_fechada = models.PositiveSmallIntegerField('Status da Solicitação', choices=ROLE_CHOICES, default='Aberta'),
data_emissao = models.DateTimeField(auto_now_add=True)
descricao_solicitacao = models.CharField('Descrição da Solicitacao', max_length=255)
numero_descricao = models.CharField(default=numero_solicitacao, max_length=255)
movimentacao_relacionamento = models.ForeignKey(Movimentacao, on_delete=models.CASCADE)
departamento_relacionamento = models.ForeignKey(Departamento, on_delete=models.CASCADE)
class Meta:
verbose_name = 'Solicitação'
verbose_name_plural = 'Solicitações'
def __str__(self):
return self.descricao_solicitacao
class Unidade(models.Model):
UNIDADE_CHOICES = (
('M²', 'm²'),
('KG', 'kg'),
('UN', 'un'),
('M', 'm'),
('CM', 'cm'),
('MM', 'mm'),
)
tipo_unidade = models.CharField('Tipo de Unidade', choices=UNIDADE_CHOICES, max_length=255, blank=True, null=True)
unidade_descricao = models.CharField('Descrição Unidade', max_length=255, null=True, blank=True)
class Meta:
verbose_name = 'Unidade'
verbose_name_plural = 'Unidades'
def __str__(self):
return str(self.tipo_unidade)
class Materiais(models.Model):
descricao_material = models.CharField('Descrição do Material', max_length=255)
class Materiais_Solicitacao(models.Model):
descricao_material = models.CharField('Descrição do Material', max_length=255, null=True, blank=True)
quantidade_material = models.FloatField('Quantidade de Material', null=False, blank=False)
relacionamento_materiais = models.ForeignKey(Materiais, 'Relacionamento com Materiais')
relacionamento_solicitacao = models.ForeignKey(Solicitacao, 'Relacionamento com Solicitacao')
unidade_relacionamento = models.ForeignKey(Unidade, 'Relacionamento com a unidade')
class Meta:
verbose_name = 'Material da Solicitação'
verbose_name_plural = 'Material das Solicitações'
def __str__(self):
return str(self.relacionamento_materiais)
class Meta:
verbose_name = 'Material'
verbose_name_plural = 'Materiais'
def __str__(self):
return self.descricao_material
views.py
class SolicitacaoCreate(LoginRequiredMixin, CreateView):
model = Solicitacao
context_object_name = 'solicitacao_list'
template_name = 'solicitacao/solicitacao_create1.html'
form_class = SolicitacaoForm
success_url = reverse_lazy('home')
def get_context_data(self, **kwargs):
data = super(SolicitacaoCreate, self).get_context_data(**kwargs)
if self.request.POST:
data['materiais'] = MateriaisFormSet(self.request.POST)
else:
data['materiais'] = MateriaisFormSet()
return data
def form_valid(self, form):
context = self.get_context_data()
materiais = context['materiais']
with transaction.atomic():
if form.is_valid():
self.object = form.save()
self.object.usuarios = self.request.user
self.object.save()
if materiais.is_valid():
materiais.instance = self.object
materiais.save()
return super(SolicitacaoCreate, self).form_valid(form)
forms.py
class SolicitacaoForm(forms.ModelForm):
class Meta:
model = Solicitacao
fields = [
'descricao_solicitacao',
'movimentacao_relacionamento',
'departamento_relacionamento',
]
class Material_SolicitacaoForm(forms.ModelForm):
class Meta:
model = Materiais_Solicitacao
fields = [
'quantidade_material',
'descricao_material',
'unidade_relacionamento',
]
MateriaisFormSet = inlineformset_factory(Solicitacao, Materiais_Solicitacao, fields=('quantidade_material', 'descricao_material', 'unidade_relacionamento', 'relacionamento_materiais'), extra=1)
一些印刷品可以更好地理解。
通过添加项目并保存请求来“用户”
数据库中只有一项。
我认为这可能是某些事情,但是在Google上查看某些帖子并没有发现有帮助/有用的东西。
感谢您的帮助。谢谢!对不起,英语不好 :P