anyway to implement this without changing 'boot/__init__' directly?

On Friday, February 20, 2015 at 4:50:57 PM UTC-5, Mathias Ettinger wrote:
>
> I guess it’s because both EXTRA_MODEL_FIELDS and strings referencing 
> classes as ForeignKey positional argument rely on the class_prepared 
> signal. But with it being only sent once, the ForeignKey doesn't have any 
> chance to catch the signal in time.
>
> For every other use case other than a self-referencing ForeignKey, either 
> the model being referenced has been created when the extra ForeignKey is 
> added and it can be resolved as a class right away, or the ForeignKey will 
> be able to resolve the class as soon as it send the class_prepared signal.
> In the case of a self-referencing extra ForeignKey, the ForeignKey is 
> added after the class_prepared signal has been fired but can't resolve the 
> string into a class yet because the model has not finished initializing. So 
> the ForeignKey connect to the class_prepared signal and wait for the class 
> that just fired it to fire it "again". In vain.
>
> One solution could be to re-raise the class_prepared signal after extra 
> fields had been added to a model. To do so, you could change the 
> add_extra_model_fields function in mezzanine/boot/__init__.py to:
> def add_extra_model_fields(sender, **kwargs):
>     """
>     Injects custom fields onto the given sender model as defined
>     by the ``EXTRA_MODEL_FIELDS`` setting.
>     """
>     model_path = "%s.%s" % (sender.__module__, sender.__name__)
>     extra_fields = fields.get(model_path, {})
>     if (extra_fields):
>         for field_name, field in extra_fields.items():
>             field.contribute_to_class(sender, field_name)
>         del fields[model_path]
>         # re-send the class_prepared signal so self-referencing ForeignKey 
> can catch up
>         class_prepared.send(sender=sender)
>
>
> Le vendredi 20 février 2015 17:44:37 UTC+1, Kacper Kołodziej a écrit :
>>
>> Hi! I'm trying to create multi-level categories structure. I have added 
>> ForeignKey to 'self' to BlogCategory. I've tried to do it in some different 
>> ways: http://pastebin.com/77ex9ehe but none of them works. I always 
>> receive error on syncdb:
>>
>> CommandError: One or more models did not validate:
>>> blog.blogcategory: 'parent_category' has a relation with model self, 
>>> which has either not been installed or is abstract.
>>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Mezzanine Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to