django-nonrel исключить список из админа - PullRequest
0 голосов
/ 15 января 2012

Я столкнулся с типичной проблемой, когда у меня есть ListField в модели.

Я бы хотел использовать администратора Django для игры с объектом, и ListField не так уж важен, это список встроенных объектов, без которых я могу жить.

Когда я использую это, я получаю сообщение об ошибке на главной странице администратора. Если я не использую объект ModelAdmin при регистрации исходного объекта Item, я получаю сообщение об ошибке только при попытке добавить Item.

from django.contrib import admin

class ItemAdmin(admin.ModelAdmin):
    exclude = ('bids',)

admin.site.register(Item, ItemAdmin)

Как правильно исключить "ставки" ListField тогда?

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Я обошел его, сделав свой ListField недоступным для редактирования, так как я не мог заставить exclude работать на меня либо ..

например:

class Item(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, db_index=True)
    title = models.CharField(max_length=255)
    bids = ListField(EmbeddedModelField('Bid'), editable=False)
1 голос
/ 15 января 2012

Подкласс ListField и переопределить formfield, чтобы он возвращал None.

Возвращение None из formfield(...) означает, что поле должно быть исключено из всех форм, поэтому вам необходимо удалить вещь exclude = ['bids'] из вашего ModelAdmin.

В качестве альтернативы вы можете заставить formfield(...) возвращать правильный forms.Field подкласс - для отображения, например. текстовая версия, используйте что-то вроде

class Item(models.Model):
    def formfield(self, **kwargs):
        return super(Item, self).formfield(form_class=YourCustomFormField, **kwargs)

Чтобы исключить его из админа, вы все равно можете использовать exclude.

https://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.Field.formfield

Поместите свой подкласс поля в yourapp/fields.py.

...