Есть ли способ определить, какие поля в модели можно редактировать в приложении администратора? - PullRequest
3 голосов
/ 29 сентября 2008

Допустим следующее:

models.py

class Entry(models.Model):
    title = models.CharField(max_length=50)
    slug = models.CharField(max_length=50, unique=True)
    body = models.CharField(max_length=200)

admin.py

class EntryAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug':('title',)}

Я хочу, чтобы заголовок был предварительно заполнен заголовком, но я не хочу, чтобы пользователь мог редактировать его у администратора. Я предполагал, что добавление fields = [] к объекту admin и не включая слаг будет работать, но это не сработало. Я также попытался установить editable = False в модели, но это также не сработало (на самом деле, останавливает рендеринг страницы).

Мысли?

Ответы [ 5 ]

4 голосов
/ 29 сентября 2008

В этом конкретном случае вы можете переопределить ваш метод сохранения, чтобы slugify (это встроенный метод, посмотрите на источник django) заголовка и сохранить его в поле slug. Также оттуда вы можете легко проверить, является ли этот слаг действительно уникальным, и изменить его, если это не так.

Рассмотрим этот пример:

def save(self):
    from django.template.defaultfilters import slugify

    if not self.slug:
        self.slug = slugify(self.title)

    super(Your_Model_Name,self).save()
0 голосов
/ 29 сентября 2008

В дополнение к переопределению save для предоставления необходимого сгенерированного значения, вы также можете использовать опцию exclude в вашем классе ModelAdmin, чтобы предотвратить отображение поля в администраторе:

class EntryAdmin(admin.ModelAdmin):
    exclude = ('slug',)
0 голосов
/ 29 сентября 2008

Этот фрагмент дает вам AutoSlugField с именно тем поведением, которое вы ищете, и добавление его в вашу модель является однострочным.

0 голосов
/ 29 сентября 2008

Этот Фрагмент Django делает то, что вы хотите, определяя пользовательский виджет только для чтения. Таким образом, вы определяете пользовательский редактор для поля, который фактически не позволяет редактировать.

0 голосов
/ 29 сентября 2008

Я не уверен, что то, что вы просите, возможно. Лучше всего, вероятно, полностью скрыть слаг из интерфейса администратора, указав свои наборы полей, а затем переопределить метод сохранения, чтобы скопировать слаг из фрагмента и, возможно, убить его ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...