AttributeError: у объекта «ModelFormOptions» нет атрибута «private_fields» - PullRequest
0 голосов
/ 29 ноября 2018

Я получаю эту ошибку, когда пытаюсь создать пользовательскую форму в представлении администратора, я не вижу никакого решения для stackoverflow (да, аналогичные проблемы), поэтому я думаю, что это хорошая идея опубликовать ее:

My Models.py:

class Webhook(models.Model):

    url = models.CharField('URL', max_length = 60, unique = True)
    description = models.CharField('Descripcion', max_length = 255)
    enabled = models.BooleanField('Enabled', default=True)
    event = models.CharField('Evento', max_length=1, choices=Events.EVENTS_CHOICES)

Мои формы:

class WebhookForm(forms.ModelForm):

    class Meta:
        model = Webhook
        fields = '__all__'

    def save(self, commit=True):
        print('saveeeeeee')
        webhook = super().save(commit=False)
        webhook.code = webhook.id

        # Get token
        response_token = TOKEN.get()
        if response_token['success']:

            # Create Webhook
            url = 'https://sandbox.bind.com.ar/v1/webhooks'
            headers = {
                    'Content-type': 'application/json',
                    'Authorization': 'JWT ' + response_token['token']
                    }
            data = {
                    'url': webhook.url, # Debera responder status_code == 200
                    'description': webhook.description,
                    'code': webhook.id,
                    'enabled': webhook.enabled,
                    'events': webhook.event
                    }
            data_json = json.dumps(data)
            response = requests.put(url, data= data_json, headers = headers)
            response_json = response.json()

            # Result
            result = {}
            if response.status_code == 409:
                result['success'] = False
                result['details'] = response_json
            else:
                result['success'] = True
                result['data'] = response_json

        # If ok, Save
        if commit & result['success']:
            webhook.save()

        return result['success']

Мой Admin.py

class WebhookAdmin(forms.ModelForm): # Only to override a form in admin

    class Meta:
        model = WebhookForm
        fields = '__all__'

    # Style to add a new User
    add_form = WebhookForm
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('url', 'description', 'code', 'enabled', 'events',)}
        ),
    )

    # Style to edit a new User
    form = WebhookForm
    fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('url', 'description', 'code', 'enabled', 'events',)}
        ),
    )

admin.site.register(Webhook, WebhookAdmin)

И я получаю эту ошибку, когда пытаюсь сделать Pythonmanage.py makemigrations:

AttributeError: у объекта 'ModelFormOptions' нет атрибута 'private_fields'

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вы вложили в подкласс не ту вещьКласс администратора должен наследоваться от admin.ModelAdmin, а не forms.ModelForm.

Классы ModelAdmin не имеют внутреннего мета-класса.Вам нужно полностью удалить этот класс.

0 голосов
/ 29 ноября 2018

Ошибка атрибута произошла из-за того, что я пытался назначить форму в класс Meta, и ей нужна модель:

class Meta:
    model = WebhookForm
    fields = '__all__'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...