виджеты в админке django - PullRequest
       9

виджеты в админке django

2 голосов
/ 19 января 2010

Мне нужен виджет, который может сделать иностранный ключ доступным только для чтения, а также он должен отображать значение, относящееся к этому полю, а не идентификатор

предположим,

Class A(models.Model):
   id=models.AutoField(primary_key=True)
   name=models.CharField(max_length=200)

   def __unicode__(self):
     return self.name

Class B(models.Model):

   id=models.AutoField(primary_key=True)
   name=models.ForeignKey(A)
   description=models.CharField(max_length=200)

теперь, когда я делаю «имя» класса B как доступное только для чтения, тогда в админке он отображает только идентификатор, соответствующий значению этого имени в классе А. Есть ли виджет, который может сделать поле доступным только для чтения, а также отобразить значение не id

Ответы [ 3 ]

0 голосов
/ 19 января 2010

Что делать, если я отображаю значение в help_text. Значит, я показываю значение в help_text и Id

Это может быть достигнуто просто

def get_form(self, request, obj=None):
    form = super(BAdmin,self).get_form(request, obj)
    link = obj.id
    pl=A.objects.get(id=obj.name_id)
    help_text1 = "%s"%(pl.name)
    form.base_fields['name'].help_text = help_text1
    return form
0 голосов
/ 19 января 2010

Третий обходной путь - использовать магистраль Django, которая добавляет свойство readonly_fields к ModelAdmin.Другой альтернативой является исправление текущей версии django с помощью этого патча: http://code.djangoproject.com/ticket/342

РЕДАКТИРОВАТЬ: я использую django r12204, потому что более поздние версии ломают приложение django-cms, что жизненно важно для меня.Я думал, что более поздние ревизии django имели это, но я должен был исправить мою установку django, чтобы показать значения внешнего ключа, а не id.Но похоже, что это поведение все еще сохраняется в стволе Django, так что вот патч: http://dpaste.com/hold/147814/

0 голосов
/ 19 января 2010

В качестве обходного пути вы можете:

1) Добавьте атрибут name к raw_id_fields атрибута ModelAdmin, а затем

2) Отключить поле ввода идентификатора, используя javascript (не затрагивая метку значения).

Он выполнит то, о чем вы спрашиваете, за исключением проблемы безопасности (если кто-то имитирует блокировку ввода «отключено / удалено») Это может дополнительно рассматриваться, например, в функции clean_name класса, унаследованного от ModelForm.

...