I think a new section in the topics/db/models guide would make sense.

If we add anything to the reference documentation, it would be quite short,
like "Model classes support __init_subclass__ and you can add fields
within". That doesn't sound worth the space to me.

On Sat, Jul 22, 2023 at 1:19 PM Jonathan Clarke <jonathan.a.cla...@gmail.com>
wrote:

> Thanks for this and sorry for the delay in coming back.  Good to hear we
> can go ahead!
>
> Understood about omitting the changes to _meta and only focussing on the
> changes that allow fields to be added via __init_subclass__, i.e. only
> making the changes in this PR:
> https://github.com/django/django/pull/16849
>
> Can I ask where a good place to document the support of __init_subclass__
> would be?
> Here are a couple of places I spotted that might be appropriate:
> - https://github.com/django/django/blob/main/docs/ref/models/class.txt
> - https://github.com/django/django/blob/main/docs/topics/db/models.txt -
> perhaps within a new subheading in the Model inheritance section?
>
> Once confirmed I'll amend the PR
>
> Thanks
>
>
> On Wed, 28 Jun 2023 at 10:28, 'Adam Johnson' via Django developers
> (Contributions to Django itself) <django-developers@googlegroups.com>
> wrote:
>
>> I think we probably won't see much more input, but since Simon and I
>> don't have any major concerns we can go ahead. I would also like to see
>> documentation about what is supported within __init_subclass__.
>>
>> The update to make _meta available seems a bit more invasive. The tests
>> catch all kinds of corner cases that are hard to deprecate, so if they're
>> breaking that may mean the change is not easy or even possible.
>>
>> On Fri, Jun 9, 2023 at 1:39 PM Jonathan Clarke <
>> jonathan.a.cla...@gmail.com> wrote:
>>
>>> Hi all, just wanted to check in to see if a conclusion can be reached on
>>> this idea?  Thanks :)
>>>
>>> On Tue, 16 May 2023 at 19:17, charettes <charett...@gmail.com> wrote:
>>>
>>>> Just wanted to publicly +1 here as well. I was skeptical that we could
>>>> add support for it without invasive changes at first but it seems to be
>>>> relatively straightforward to support.
>>>>
>>>> One ask I would add is that we explicitly document what is support and
>>>> what isn't. For example, at the time `__init_subclass__` is called one
>>>> should not expect `_meta` or any other subclass fields to be available and
>>>> that even when calling `super().__init_subclass__`. That might come as a
>>>> surprise to users that want to do anything to a trivial field addition
>>>> (e.g. perform model introspection). For non-trivial use cases a
>>>> class_prepared signal seems like it's still the best way to run code once
>>>> the class is fully initialized.
>>>>
>>>> Changing these expectations could be done by moving most of the
>>>> ModelBase.__new__ logic to Model.__init_subclass__ but this would require a
>>>> massive re-enginering of meta programming logic that is remain unchanged
>>>> for years.
>>>>
>>>> Le vendredi 12 mai 2023 à 09:38:04 UTC-4, Adam Johnson a écrit :
>>>>
>>>>> +1 from me. As Simon covered on the ticket, the change is small.
>>>>> Making Django classes support __init_subclass__ might unlock some nice
>>>>> dynamic field patterns.
>>>>>
>>>>> On Thu, May 11, 2023 at 12:47 PM hottwaj <jonathan...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi there, I opened the above ticket and submitted a PR with fix and
>>>>>> test added.  I was asked to bring the issue here for wider review before
>>>>>> the ticket is re-opened (if that is what people agree to do)
>>>>>>
>>>>>> For reference, links to the ticket and PR are:
>>>>>> https://code.djangoproject.com/ticket/34555
>>>>>> https://github.com/django/django/pull/16849
>>>>>>
>>>>>> The issue raised is that current implementation of ModelBase.__new__
>>>>>> prevents use of __init_subclass__ on a Model to add model fields
>>>>>>
>>>>>> e.g. the code listed at the end of this email does not currently work
>>>>>> (the PR fixes this).
>>>>>>
>>>>>> Currently the same result could be achieved by i) writing a new
>>>>>> metaclass e.g. BaseBookModelMeta or ii) using a class decorator where
>>>>>> cls.add_to_class(field) is called.
>>>>>>
>>>>>> Using __init_subclass__ is advised as a simpler alternative to
>>>>>> writing a metaclass to customise class creation, hence this PR.
>>>>>>
>>>>>> Hope that makes sense and appreciate any feedback.  Thanks!
>>>>>>
>>>>>>
>>>>>> class BaseBookModel(models.Model):
>>>>>>     class Meta:
>>>>>>         abstract = True
>>>>>>
>>>>>>     def __init_subclass__(cls, author_cls, **kwargs):
>>>>>>         super().__init_subclass__(**kwargs)
>>>>>>         cls.author = models.ForeignKey(author_cls,
>>>>>> on_delete=models.CASCADE)
>>>>>>
>>>>>> class Author(models.Model):
>>>>>>     name = models.CharField(max_length=256, unique=True)
>>>>>>
>>>>>> class Book(BaseBookModel, author_cls=Author):
>>>>>>     pass
>>>>>>
>>>>>> --
>>>>>> 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 django-develop...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/django-developers/015a5798-d084-4afb-b800-e83154301ec7n%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/django-developers/015a5798-d084-4afb-b800-e83154301ec7n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "Django developers (Contributions to Django itself)" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/django-developers/El5FRcymxSI/unsubscribe
>>>> .
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> django-developers+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/django-developers/ffaba0d3-c31d-4e49-bdaf-effb021c149bn%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/django-developers/ffaba0d3-c31d-4e49-bdaf-effb021c149bn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> 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 django-developers+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/django-developers/CAFW_ify_bF85Zih%3DHTM4mwE8PYK-8i6keLAn0MgYwuscLmT5Lw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/django-developers/CAFW_ify_bF85Zih%3DHTM4mwE8PYK-8i6keLAn0MgYwuscLmT5Lw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Django developers (Contributions to Django itself)" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/django-developers/El5FRcymxSI/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to
>> django-developers+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-developers/CAMyDDM3xwa00f%3Dr24N0Y5Ywo-FvL1kt55NG%2BrgiUeHu6TtQCJg%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-developers/CAMyDDM3xwa00f%3Dr24N0Y5Ywo-FvL1kt55NG%2BrgiUeHu6TtQCJg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> 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 django-developers+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-developers/CAFW_ifzHXLPO%2BSVAskrJbNL1-7s8qkwO0RncG85SkhEmD7%2BncA%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-developers/CAFW_ifzHXLPO%2BSVAskrJbNL1-7s8qkwO0RncG85SkhEmD7%2BncA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 django-developers+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/CAMyDDM1yZD1dbQjk5%3D2sNv7v4XpiF%3D_zcOc_qwZ4%3DiTBL00Ejw%40mail.gmail.com.
  • Tic... hottwaj
    • ... 'Adam Johnson' via Django developers (Contributions to Django itself)
      • ... charettes
        • ... hottwaj
        • ... Jonathan Clarke
          • ... 'Adam Johnson' via Django developers (Contributions to Django itself)
            • ... Jonathan Clarke
              • ... 'Adam Johnson' via Django developers (Contributions to Django itself)

Reply via email to