2012-01-15 2 views
0

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

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

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

from django.contrib import admin 

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

admin.site.register(Item, ItemAdmin) 

Как правильно исключить «Ставки» ListField, то?

ответ

1

Подкласс 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.

+0

Jonas, спасибо за Ваш ответ мат. Я все еще очень новичок в Django и Python. Где я должен определить этот подкласс ListField? Я думаю в моих models.py в своем приложении, чтобы сохранить его независимым. Также, когда вы говорите, не возвращаете none из formfield(), вы имеете в виду, что он должен реализовать метод formfield(), который просто не возвращает ничего? Как я могу, например, возвращать текстовую версию моего встроенного объекта? Спасибо, брату – holografix

+0

Да, действительно верните 'Нет'. Я добавил дополнительную информацию в свой ответ. –

+0

Джонас еще раз благодарит! Я запутался здесь, между определением модели, определением поля и FormField. Так что я пытаюсь сделать здесь, это SubClass ListField, чтобы я мог печатать (и идеально сохранять) экземпляры EmbeddedObjectField, которые он содержит. – holografix

3

Я работал вокруг него, делая мой 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)