Необходимо поместить
from project import Project
в controllers/__init__.py
.
Примечание это, когда Абсолютный импорт становится значением по умолчанию (Python 2.7?), Вы захотите добавить точку перед именем модуля (для предотвращения коллизий с моделью верхнего уровня, названной project
), т.е.
from .project import Project
Как описано в Создание форм из моделей - Выбор полей для использования , есть три способа:
editable = False
. Все формы, созданные на основе модели, будут исключать поле. fields
во внутреннем классе Meta
, чтобы включить только те поля, которые вы хотите. ] exclude
во внутреннем классе Meta
для перечисления полей, которые вам не нужны. Итак, если ваша модель имеет поля field1
, field2
и field3
, и вы не хотите field3
, метод № 2 будет выглядеть так:
class MyModelForm(ModelForm):
class Meta:
model = MyModel
fields = ('field1', 'field2')
А метод № 3 будет выглядеть так:
class MyModelForm(ModelForm):
class Meta:
model = MyModel
exclude = ('field3',)
Вы можете использовать свойство exclude для удаления полей из ModelForm
exclude = ('field_name1', 'field_name2,)
Одна из причин, о которой я могу думать, - это если ваш класс ModelAdmin, который использует вашу настраиваемую форму, имеет конфликтующие настройки. Например, если вы также явно указали поле «имя» в «полях» или «наборах полей» вашего ModelAdmin.
У меня была такая же проблема. Вот как я заставил его работать в новом Django (trunk):
class MyModelAdmin(admin.ModelAdmin):
# Your stuff here..
def get_form(self, request, obj=None, **kwargs):
if request.user.is_staff: # condition
self.exclude = ('field',)
return super(PublishAdmin, self).get_form(request, obj=obj, **kwargs)
Переопределив метод get_form
и поместив здесь логику, вы можете выбрать, какую форму
вы хотите отображать . Выше я отобразил стандартную форму, когда было выполнено условие.