Я не знаю, что вы подразумеваете под «переопределением всего вида», потому что это то, что делает Django настолько изящным для использования, что позволяет зависеть от дополнительной функциональности без излишней суеты. Предполагая, что я не собираюсь вставлять всю свою ногу мне в рот, вот как я подхожу к ней:
Добавление заметок к чему-то не должно быть чрезмерно сложным, просто определите еще одну модель в вашем cars.models
и добавьте что-то вроде Notes
. Тогда просто используйте эту модель модели Cars, поскольку это внешний ключ и zippozappo - у вас есть некоторые заметки.
Что касается «ограничения» его только администратором, если ваши общедоступные представления не позволят людям добавлять заметки или отображать заметки, они не должны появляться за пределами приложения администратора.
сайт/models.py
from django.contrib.auth.models import User
# snip your stuff...
class Notes(models.Model)
user = models.ForeignKey('auth.User')
author = models.ForeinKey('auth.User')
note = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
убедитесь ./manage syncdb
после этого!
сайт/admin.ру
from site.models import Notes
from django.contrib.auth.models import User
class NotesInline(admin.StackedInline):
model = Notes
extra = 0
class UserAdmin(UserAdmin):
inlines = [NotesInline,]
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Вот некоторые примечания для использования встроенного материала администратора, в случае, если вы хотите, чтобы настроить отображение примечаний в конце каждого автомобиля: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.inlines
Конечно, вы можете расширить/изменить/измените это, как вам нравится, но вам не нужно делать ничего сложного, чтобы добавить некоторые дополнительные функции к вашим моделям.
В идеале вы бы создали приложение Notes, которое позволит вам прокомментировать любой объект, который вы хотите, а не только пользователи.
редактировать
class NotesInline
теперь имеет extra=0
. Это остановит 3 записи, отображаемые по умолчанию на странице пользователя.
class Notes
имеет на нем author = models.ForeinKey('auth.User')
, в котором вам необходимо отслеживать, кто оставил записку в первую очередь. Это добавит раскрывающийся список, который позволит вам выбрать, кто покидает заметку. Если я правильно понимаю, вы хотите, чтобы это поле было автоматически заполнено текущим пользователем. Проблема с форсированием этого заключается в том, что на панели администратора все админы создаются одинаково (если только они не ограничены разрешениями), поэтому для ограничения этого поля author
текущему пользователю, которому вы входите в систему, потребуется больше вмешательства, чем вам следует беспокоиться.
Если вам необходимо расширить панель администратора до такой степени, что вы хотите автоматически заполнить эти поля, вам придется создать другое общедоступное представление, а затем ограничить доступ к тем пользователям, у которых есть разрешения на доступ Это. Либо, либо вам придется начать переопределять взгляды/шаблоны admin самостоятельно. Это своего рода встроенная функция админ-панели Django - она должна использоваться для изменения ваших таблиц, не обязательно являясь панелью ввода всех пользователей.
еще одна головная боль: Джанго syncdb
не будет изменять таблицы, которые уже существуют, так что если вы хотите добавить/удалить столбец из существующей модели, вам необходимо удалить и заново создать таблицу, или использовать что-то вроде django-evolution , Однако использование этого для другого вопроса.
Чтобы удалить дополнительные поля, в '' NotesInline' добавить 'extra = 0'. Также в вашем «классе Note» нет никакого ForeignKey, который связывает эту заметку с объектом (Car). Без этого записка не знает, где ее оставляют, только кто ее написал, что было написано и когда она была написана. – GordonsBeard
'return '{1} created note on: {0}". Format (self.created_on, self.user.name) ' – GordonsBeard
Это то, что я использую функциональность примечания для модели пользователя, но администратор не вошли в систему как этот пользователь. So Car = Пользователь, и теперь я хочу один, где Author = logged in User. Я достаточно ясно? – Chris