Foreign key in a ModelForm

51 views
Skip to first unread message

durir...@gmail.com

unread,
Aug 8, 2015, 7:58:59 AM8/8/15
to Django users
I searched in the web for some example of setting a FK in a ModelForm (bound and unbound), but the examples I founded didn't worked for me. The best thing I think I've is this:

forms.py
class RegistroComentarioForm(ModelForm):
   
def __init__(self, *args, **kwargs):
       
super(RegistroComentarioForm, self).__init__(*args, **kwargs)
       
# This is supossed to get all rows from a model. A "Comentario" has one "CategoriaComentario".
       
# Maybe I should do a filter here when I bound data, but the problem is in the tests...
       
self.fields['categoria'] = ModelChoiceField(
           
queryset=CategoriaComentario.objects.all().values_list('id', 'nombre'),
            empty_label='...')
   
# bla bla bla Meta bla bla bla fields...
tests.py
class RegistroComentarioFormTestCase(TestCase):
   
def test_registrar_comentario(self):
       
# Registro_Comentario_Form_X.
        r_c_f_a = RegistroComentarioForm({
           
# I tried "'categoria': 1", but nothing.
           
'enunciado': 'Eres tan fea que sólo te guiñan un ojo los '
                         'francotiradores.'
        })

       
# Here is the problem. This prints:
        # <select id="id_categoria" name="categoria">
        # <option value="" selected="selected">---------</option>
        # </select>
        # <textarea cols="40" id="id_enunciado" maxlength="1000" name="enunciado"
       
# placeholder="Sólo caracteres alfanuméricos, sin espacios, máx. 1000" rows="10">
                 # Eres tan fea que sólo te guiñan un ojo los francotiradores.</textarea>
        for campo in r_c_f_a:
           
print(campo)

       
self.assertTrue(r_c_f_a.is_valid())

So I don't have any CategoriaComentario available. In the docs they don't say much about ModelChoiceField, so I just don't know what to do.

James Schneider

unread,
Aug 8, 2015, 4:49:19 PM8/8/15
to django...@googlegroups.com

Try removing the .values_list() portion of the query set in your ModelForm. You should be passing a query set, not a list of values. The form knows how to iterate through the query set.

-James

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/bfdaa10a-cacb-4c00-9058-c5f28585f74e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

durir...@gmail.com

unread,
Aug 9, 2015, 7:16:42 AM8/9/15
to Django users
I get the same, an empty select.

Daniel Roseman

unread,
Aug 9, 2015, 11:00:04 AM8/9/15
to Django users
What makes you think you should have any? Have you created some in that test? Where?
--
DR. 

durir...@gmail.com

unread,
Aug 9, 2015, 12:51:30 PM8/9/15
to Django users
Have you created some in that test?

Now I realized I forget to add a setUp function with the DB rows...
.______________________________________________________________________. 

It doesn't matter how many time I pass coding, always the same fails. Thanks both.

durir...@gmail.com

unread,
Aug 9, 2015, 2:17:13 PM8/9/15
to Django users
Ok, now I've other problem, and it is that in the HTML the Select doesn't changes the value selected (it is always the first one, "---------"). Any particullary reason for it?
Reply all
Reply to author
Forward
0 new messages