Tengo dos modelos relacionados por una clave externa:de entrada de forma libre para ForeignKey campo en un Django ModelForm
# models.py
class TestSource(models.Model):
name = models.CharField(max_length=100)
class TestModel(models.Model):
name = models.CharField(max_length=100)
attribution = models.ForeignKey(TestSource, null=True)
Por defecto, un Django ModelForm presentará como un <select>
con <option>
s; sin embargo, preferiría que esta función fuera una entrada de forma libre, <input type="text"/>
, y detrás de escena obtener o crear el objeto TestSource necesario y luego relacionarlo con el objeto TestModel.
he tratado de definir un ModelForm costumbre y Campo de lograr esto:
# forms.py
class TestField(forms.TextInput):
def to_python(self, value):
return TestSource.objects.get_or_create(name=value)
class TestForm(ModelForm):
class Meta:
model=TestModel
widgets = {
'attribution' : TestField(attrs={'maxlength':'100'}),
}
Por desgracia, me estoy haciendo: invalid literal for int() with base 10: 'test3'
cuando se trata de comprobar is_valid
en el formulario enviado. ¿Dónde estoy equivocado? ¿Es su y más fácil forma de lograr esto?
Esto ayuda mucho. Pero todavía tengo algunos problemas, ¿se requerirá algún código no estándar en la vista? Mina explota en is_valid() marca todavía: no se puede asignar "u'myString '": "TestModel.attribution" debe ser una instancia de "TestSource". – brown145
@ brown145: Creo que debe excluir la atribución, de lo contrario, intentará validarla. Ver mi respuesta actualizada. – sdolan