在下面的代码所示的示例中,是否可以使用Endereco
自动验证和创建Coordenada
和LocalizacaoForm
的实例?
我想这样做的原因是我可以尽可能地使用通用视图,并且它们不能正常工作(至少不是开箱即用)每个视图有多个ModelForm
在应用程序中,我想呈现LocalizacaoForm
并显示Endereco
和Coordenada
中的字段。我到目前为止所做的似乎并没有解决它,因为self.fields.update(fields_for_model(Coordenada))
只创建输入字段,而不是Coordenada
的实际实例。因此,我得到django NOT NULL constraint failed id
对象 coordenada 。
有没有办法做我想要的或者我应该坚持分别渲染每个表格?
#models.py
class Coordenada(models.Model):
latitude = models.FloatField()
longitude = models.FloatField()
altitude = models.FloatField()
erro_horizontal = models.FloatField()
class Endereco(models.Model):
cep = models.IntegerField()
uf = models.CharField(max_length=2)
localidade = models.CharField(max_length=50) # nome da cidade
# other fields...
class Localizacao(models.Model):
endereco = models.OneToOneField(Endereco)
coordenada_geografica = models.ForeignKey('Coordenada')
#forms.py
class LocalizacaoForm(forms.ModelForm):
def __init__(self, instance=None, *args, **kwargs):
super(LocalizacaoForm, self).__init__(instance=instance, *args, **kwargs)
# Retrieve the fields from Endereco and Coordenada model and update the fields with it
self.fields.update(fields_for_model(Endereco))
self.fields.update(fields_for_model(Coordenada))
class Meta:
model = Localizacao
exclude = ('endereco', 'coordenada_geografica')
#views.py
class LocalizacaoCreateView(generic.CreateView):
model = Localizacao
form_class = LocalizacaoForm
template_name = 'localizacao_create_form.html'
答案 0 :(得分:2)
您可以在Coordenada
的{{1}}方法中创建Endereco
和save()
的实例,如下所示:
LocalizacaoForm