Hi, all.

I have a Submission model with a many-to-many relationship with a Market 
model and explicitly defined a SubmissionMarket model as intermediary 
model. I have defined
Submission inlines in a ModelAdmin class (used by Django admin) and defined 
the markets field as the first one in the fields attribute of a form 
associated with that submission inline. However, that field is being shown 
by last (at the end of the inline row). 

Debugging, I found out that:

- django.forms.models.fields_for_model() creates a dict of form fields for 
a Django model. That function is used during the construction of any form.
- a form field defined in the Form.Meta.fields is ignored in 
fields_for_model() if formfield_callback is passed as argument and if that 
callable returns None
- django.forms.models.ModelFormMetaclass 
passes BaseModelAdmin.formfield_for_dbfield as formfield_callback arg in 
fields_for_model() 
- This formfield_for_dbfield() method ends up 
calling formfield_for_manytomany() if the field is m2m. The latter method 
returns None if the intermediary model was not created automatically by 
Django, which causes the field to be ignored. This is the code that does it 
in django/contrib/admin/options.py:

        # If it uses an intermediary model that isn't auto created, don't 
show
        # a field in admin.
        if not db_field.remote_field.through._meta.auto_created:
            return None

- Later, the markets field is added at the end of the form, I haven't 
investigated why.

My question is: what's the motivation of ignoring the m2m field if the 
intermediary model is not auto created? Could this behavior be customized?

Thanks in advance!

Regards,
Alan

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/0974c9a3-3e03-42bb-a862-922ad68e329an%40googlegroups.com.

Reply via email to