Hi Collin,
    Thanks, that would indeed help in my case.

The save_form_data method of the ManyToMany field would still eventually need to be updated to have the ability to pass the through_defaults kwarg to set(). However none of the extra fields on my intermediate model are required so that patch would definitely help clean up the code in my situation.

I'll patch our test server and see if everything runs smoothly and keep an eye that pull request.

Cheers,
    Andrew


On 1/16/2018 8:39 AM, Collin Anderson wrote:
Hi Andrew,

Would allowing set() for through models help in your case? https://github.com/django/django/pull/8981 <https://github.com/django/django/pull/8981>

Thanks,
Collin


On Mon, Jan 15, 2018 at 5:14 PM, Andrew Standley <[email protected] <mailto:[email protected]>> wrote:

    Greetings,
        I've been messing around with trying to update some custom
    forms to instead be model forms, and I ran into something that
    struck me as odd.

    ModelForm relies on the models fields to select a default form
    field, and to save the returned form data. However the
    ManytoManyField does not appear to have behavior for dealing with
    'through' models. The save_form_data just calls `set` on the
    ManyRelatedManager, which errors out if a through model without
    auto_created=True is defined.

    As far as I can tell I either have to write a lot of boiler plate
    in my ModelForm (add a custom field, override the __init__,
    override save(), etc), or define a custom ManyToManyField which
    overrides save_form_data. This seems odd to me as the through
    model seems like the sensible place for any behaviour required by
    the extra fields it defines.

    The ManyToMany field has knowledge of everything needed to access
    the intermediate model's default manager. It would make perfect
    sense to me that to have to implement custom clear/add/remove
    methods on either the model or it's manager for any through models
    that defined extra fields, and then be able to plug-and-play with
    the ModelForm framework. So my question is:

    Is there any particular reason that save_form_data does not have
    some default behavior for through models?

    Cheers,
        Andrew



    --
    This message has been scanned by E.F.A. Project and is believed to
    be clean.


-- You received this message because you are subscribed to the Google
    Groups "Django developers  (Contributions to Django itself)" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to [email protected]
    <mailto:django-developers%[email protected]>.
    To post to this group, send email to
    [email protected]
    <mailto:[email protected]>.
    Visit this group at *MailScanner has detected definite fraud in
    the website at "groups.google.com". Do /not/ trust this website:*
    https://groups.google.com/group/django-developers
    <https://groups.google.com/group/django-developers>.
    To view this discussion on the web visit *MailScanner has detected
    definite fraud in the website at "groups.google.com". Do /not/
    trust this website:*
    
https://groups.google.com/d/msgid/django-developers/e1fe8354-e1d1-05a1-e433-6fcf7e46216a%40linear-systems.com
    
<https://groups.google.com/d/msgid/django-developers/e1fe8354-e1d1-05a1-e433-6fcf7e46216a%40linear-systems.com>.
    For more options, visit *MailScanner has detected definite fraud
    in the website at "groups.google.com". Do /not/ trust this
    website:* https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>.


--
You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>. Visit this group at *MailScanner has detected definite fraud in the website at "groups.google.com". Do /not/ trust this website:* https://groups.google.com/group/django-developers <https://groups.google.com/group/django-developers>. To view this discussion on the web visit *MailScanner has detected definite fraud in the website at "groups.google.com". Do /not/ trust this website:* https://groups.google.com/d/msgid/django-developers/CAFO84S5crVgjpsNMiU8gPbs%3DYjBmDwrmgMVi9fjLqxBDa%2B7-0g%40mail.gmail.com <https://groups.google.com/d/msgid/django-developers/CAFO84S5crVgjpsNMiU8gPbs%3DYjBmDwrmgMVi9fjLqxBDa%2B7-0g%40mail.gmail.com?utm_medium=email&utm_source=footer>. For more options, visit *MailScanner has detected definite fraud in the website at "groups.google.com". Do /not/ trust this website:* https://groups.google.com/d/optout <https://groups.google.com/d/optout>.

--
*Andrew Standley*
/Senior Software Engineer/
Linear Systems
(909) 899-4345 *225
/[email protected] <mailto:[email protected]> /

--
You received this message because you are subscribed to the Google Groups "Django 
developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/964a8176-ba90-6457-a800-18002543be59%40linear-systems.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to