Прежде всего извините за длинный пост. Я просто пытаюсь по-настоящему разобрать проблему.
Я использую пакеты django-moderation
и django-comments-xtd
для осуществления модерации комментариев. Сверху я использую следующую модель:
class VotableComment(XtdComment):
vote_score = models.IntegerField(db_index=True, default=0)
(...)
Сам XtdComment наследуется от модели Comment
из пакета django-comments
. Под капотом все это работает через OneToOneField
s, то есть:
migrations.CreateModel(
name='XtdComment',
fields=[
('comment_ptr', models.OneToOneField(auto_created=True, primary_key=True, parent_link=True, serialize=False, to='django_comments.Comment', on_delete=models.CASCADE)),
(...)
migrations.CreateModel(
name='VotableComment',
fields=[
('xtdcomment_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='django_comments_xtd.XtdComment')),
(...)
Это означает, что объект VotableComment
должен иметь как comment_ptr
, так и xtdcomment_ptr
в качестве атрибутов.
Ошибка возникает, когда django-moderation
пытается установить атрибут changed_object
(который относится к объекту VotableComment
) его модели ModeratedObject
, которая является полем SerializedObjectField
. Затем я получаю:
Основная проблема возникает при десериализации и попытке установить значения полей объекта VotableComment
, получая значение от его родителя моделей. В частности, поле comment_ptr
:
Как вы можете видеть, есть проблема при попытке установить comment_ptr
со значением <Comment: :...>
на модели VotableComment
, потому что позже related_descriptors.py
сначала пытается разрешить все inherited_pk_fields
. Есть два из них, которые происходят из родительской модели (XtdComment
) и модели деда (Comment
). Он отказывает во втором, потому что пытается получить доступ к <Comment: :...>.comment_ptr
, когда он должен обращаться к своей родительской модели <XtdComment>.comment_ptr
. Обратите внимание, что первое полетекапак_полноценно работает нормально, потому что оно разрешается в <Comment>.id
, которое существует.
Я думаю, мне придется реализовать собственную логику модерации c, поскольку, похоже, возникают проблемы с моделями, которые имеют множественное наследование, но любая помощь очень ценится. Спасибо!