Hi everyone,
Does anyone know how to post blog at below page:
https://www.djangoproject.com/community/blogs/

I am really frustrated as I submitted last week but nothing is there. Who
is in charge of blog posts on Django site?

Thx,
Matt



On Thu, Jul 25, 2019 at 12:38 AM Mike Dewhirst <[email protected]>
wrote:

> On 25/07/2019 1:03 pm, Jim Illback wrote:
> > I had a slight variation on this thread - where to put some M2M field
> > validation/deletion logic.
> >
> > I have a purely model-based form where a checkbox’s value determines
> > whether another field (it’s a M2M field) in the form should be NULL or
> > keep its values to be saved in the database. So, following the
> > appropriate separation of concerns as advocated below, I added logic
> > in both the models' clean and save override methods. Neither approach
> > set the other field to NULL when it should have been. The reason is
> > the form still contained M2M values even though the model said to
> > delete them (delete the set, actually).
> >
> > After a lot of trial and error, it turns out that the model’s save
> > seems to be run BEFORE the form’s save. To me, that seems backwards.
> > Shouldn’t the model’s processes (which are directly relate to the
> > database, the ultimate data source) occur last and well before the
> > form’s (which are merely an interaction with the user)? What was
> > happening was my model’s delete actually did the deletions (those IDs
> > were gone), but then the form’s processing came along afterwards and
> > re-inserted them again (with brand new IDs).
>
> Don't know what's happening here but you can be sure Django is doing it
> the right way.
>
> Maybe you need to look at your on_delete constants. models.CASCADE
> versus models.SET_NULL or models.PROTECT
>
> >
> > Can someone help me understand why Django has chosen this seemingly
> > “inversion” of processing - first models’ processes, then forms’? And,
> > perhaps more importantly, where should this either/or logic should be
> > placed so it will take effect?
> >
> > Thanks very much,
> > Jim Illback
> >
> >> On Jul 13, 2019, at 11:48 PM, Mike Dewhirst <[email protected]
> >> <mailto:[email protected]>> wrote:
> >>
> >> Well yes it could be called multifaceted.
> >>
> >> Usually but not always the interface with the user is the form. You
> >> can have non-database fields as well as model fields so either way
> >> there has to be a full suite of validation functionality available in
> >> both types of forms. Luckily, model forms automatically call
> >> model.clean() for you.
> >>
> >> Unit tests don't though. You have deliberately call obj.clean() if
> >> you want to test things. obj.save() doesn't call obj.clean().
> >>
> >> Actually, I also do a bit in view code too especially if there are
> >> non-database or hidden fields in the form. I know you are not
> >> supposed to validate data in a view for proper separation of concerns
> >> but it does keep my forms neater.
> >>
> >> The bottom line for me is that if I can imagine non-form access ...
> >> eg through an API ... then all validation possible has to be via
> >> model.clean() and the API has to remember to call clean() before
> >> saving every time there is a POST
> >>
> >> Hence I*always*put business rules validation in model.clean() and
> >> leave 'local' validation for the form.
> >>
> >> You are right. There are quite a few moving parts<ic_list_happy.png>
> >>
> >> /Connected by Motorola/
> >>
> >>
> >> Dean Karres <[email protected] <mailto:[email protected]>>
> wrote:
> >>
> >> Thank you. There are way more parts to this than I would have imagined.
> >>
> >>
> >>
> >> On Sat, Jul 13, 2019, 8:01 PM Mike Dewhirst <[email protected]
> >> <mailto:[email protected]>> wrote:
> >>
> >>     On 14/07/2019 10:37 am, Dean Karres wrote:
> >>>     Hi,
> >>>
> >>>     I am learning Django.  I am using CBVs.  My default "index.py"
> >>>     view is basically a dashboard for the app I am playing with.  As
> >>>     my models and views become more complicated I want to be able to
> >>>     ask, for any model instance, is this instance "valid" or
> >>>     "complete".  Valid means that all Required elements are present
> >>>     and have reasonable values.  "Complete" means that an instance
> >>>     is "valid" but also some specific bits of additional info are
> >>>     also ok.
> >>>
> >>>     For example I have a Student model that has name and address
> >>>     info.  There is a ManyToMany relation to the Class(es) in which
> >>>     that Student is enrolled.  A "student" instance is valid if the
> >>>     name and address fields are filled.  A student is "complete" if
> >>>     the student is valid and has signed up for one or more classes.
> >>>
> >>>     So, my question is: where should the valid and complete methods
> >>>     live?  Should they be in the Student model or CBV? Someplace
> >>>     else?  Does it matter?
> >>
> >>     I like to put that sort of stuff into model methods then add
> >>     model.clean() to call them and raise whatever error may be
> >>     appropriate if they fail.
> >>
> >>
> https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#interaction-with-model-validation
> >>
> >>     and
> >>
> >>
> https://docs.djangoproject.com/en/2.1/ref/models/instances/#validating-objects
> >>
> >>     and
> >>
> >>
> https://docs.djangoproject.com/en/2.1/ref/models/instances/#django.db.models.Model.clean
> >>
> >>     You can raise your own errors which inherit from ValidationError
> >>     to fine tune the process. For example, I differentiate between
> >>     BusinessRuleViolation and InvalidToken and a couple of others
> >>     where that delivers better control.
> >>
> >>
> >>>
> >>>     Cheers
> >>>     --
> >>>     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 [email protected]
> >>>     <mailto:[email protected]>.
> >>>     To post to this group, send email
> >>>     [email protected]
> >>>     <mailto:[email protected]>.
> >>>     Visit this group athttps://groups.google.com/group/django-users.
> >>>     To view this discussion on the web
> >>>     visithttps://
> groups.google.com/d/msgid/django-users/22801669-96ec-4a43-a264-fd50c2544604%40googlegroups.com
> >>>     <
> https://groups.google.com/d/msgid/django-users/22801669-96ec-4a43-a264-fd50c2544604%40googlegroups.com?utm_medium=email&utm_source=footer
> >.
> >>>     For more options, visithttps://groups.google.com/d/optout.
> >>
> >>
> >> --
> >> 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 [email protected]
> >> <mailto:[email protected]>.
> >> To post to this group, send email [email protected]
> >> <mailto:[email protected]>.
> >> Visit this group athttps://groups.google.com/group/django-users.
> >> To view this discussion on the web
> >> visithttps://
> groups.google.com/d/msgid/django-users/ajujeafh6d4qa4vvpfv2bxf9.1563085360028%40email.android.com
> >> <
> https://groups.google.com/d/msgid/django-users/ajujeafh6d4qa4vvpfv2bxf9.1563085360028%40email.android.com?utm_medium=email&utm_source=footer
> >.
> >> For more options, visithttps://groups.google.com/d/optout.
> >
> > --
> > 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 [email protected]
> > <mailto:[email protected]>.
> > To view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/django-users/A2531CD5-E89E-4EB3-84C5-CF6CEB05E53D%40hotmail.com
> > <
> https://groups.google.com/d/msgid/django-users/A2531CD5-E89E-4EB3-84C5-CF6CEB05E53D%40hotmail.com?utm_medium=email&utm_source=footer
> >.
>
> --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/485bb1ee-db33-09d3-a3d9-aebf337ade20%40dewhirst.com.au
> .
>


-- 
Cheers,

Matt Zand
Cell: 202-420-9192
Work: 240-200-6131
High School Technology Services <https://myhsts.org/>
DC Web Makers <https://dcwebmakers.com/>
Coding Bootcamps <https://coding-bootcamps.com/>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAJHWHyU8H5-02%2BJZ9tZkVz8nzggrjuJ%2Bca5SZVk8ZjVcT4uc%2BA%40mail.gmail.com.

Reply via email to