0
在下面的代碼顯示的示例中,是否可以使用LocalizacaoForm
自動驗證並創建Endereco
和Coordenada
的實例?通過Django中的外鍵字段驗證多個相關對象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'
就像一個魅力和看起來比如果我單獨創建的每個窗體乾淨多了。 謝謝! –