【问题标题】:how to fix 'PluginReferenceField' object has no attribute 'rel' fields.py from djangocms-forms如何修复 'PluginReferenceField' 对象没有来自 djangocms-forms 的属性 'rel' fields.py
【发布时间】:2025-12-19 11:10:12
【问题描述】:
class PluginReferenceField(models.ForeignKey):
    def __init__(self, *args, **kwargs):
        kwargs.update({'null': True})  # always allow Null
        kwargs.update({'editable': False})  # never allow edits in admin
        kwargs.update({'on_delete': SET_NULL})  # never delete plugin
        super(PluginReferenceField, self).__init__(*args, **kwargs)

    def _create(self, model_instance):
        return self.rel.to._default_manager.create(name=model_instance.name)

    def pre_save(self, model_instance, add):
        if not model_instance.pk and add:
            setattr(model_instance, self.name, self._create(model_instance))
        else:
            reference = getattr(model_instance, self.name)
            if not reference:
                setattr(model_instance, self.name, self._create(model_instance))
                reference = getattr(model_instance, self.name)
            if reference.name != model_instance.name:
                reference.name = model_instance.name
                reference.save()
        return super(PluginReferenceField, self).pre_save(model_instance, add)

【问题讨论】:

  • 你使用的是什么版本的 django/django-cms/djangocms-forms?这是谁的代码,是你的,还是包的一部分?

标签: django django-cms


【解决方案1】:

我在设置djangocms和安装djangocms-forms后遇到了类似的问题。

看起来“rel.to”在 2.0 中已被贬低。见票https://code.djangoproject.com/ticket/24317

在 djangocms_forms 包的 fields.py 的第 66-67 行,更改

def _create(self, model_instance):
    return self.rel.to._default_manager.create(name=model_instance.name)

def _create(self, model_instance):
    return self.related_model._default_manager.create(name=model_instance.name)

事后您可能还需要删除 forms.py:348 中“user.is_authenticated”的“()”。我需要做进一步的调试,因为我在之后立即遇到了this issue

我能够让 djangocms-forms 在 Django 版本 3.1.4 上成功运行。

【讨论】:

    最近更新 更多