Django Admin Изменение формы встроенного администратора в зависимости от типа класса - PullRequest
2 голосов
/ 21 марта 2011

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

Если бы у меня было несколько таких моделей:

class ContentItem(models.Model):
    title = models.CharField(max_length=1000)
    page_order = models.IntegerField()
    last_update_date = models.DateTimeField(default=datetime.now())

    class Meta:
      abstract = True
      ordering = ['page_order', 'last_update_date', 'title']

class LinkContent(ContentItem):
  url = models.URLField()
  link_text = models.CharField(max_lenth=1000)

class TextContent(ContentItem):
 text = models.CharField()


class VideoContent(ContentItem):
      title = models.CharField()
      video_file = models.FieldField(upload_to = 'videos')

class Page(models.Model):
  contents = models.ManyToManyField(ContentItem)
  title = models.CharField()

Предположим, я использую django-model-utilsкак было упомянуто в ответе на предыдущий вопрос.

Как бы я заставил интерфейс администратора показывать правильную строку в зависимости от дочернего класса?Я хочу, чтобы правильный тип показывался для типа.Так что, если у меня есть 3 элемента по содержанию, текст, ссылка и видео.Затем, когда я смотрю на эту Page в интерфейсе администратора, я хочу видеть встроенную форму для каждого элемента.

Как это достигается?

Кроме того, как бы я справился с добавлением новых вещей в отношение?В идеале, когда пользователь хочет добавить новый ContentItem , ему будет задан вопрос, какой тип контента ему нужно добавить.Тогда форма добавления для этого типа контента откроется во всплывающем окне.Поэтому, если я укажу, что хочу добавить VideoContent , я получу всплывающее окно, позволяющее загрузить видео.Если я укажу, я хочу TextContent , я получаю всплывающее окно, где я вводю текст.

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

1 Ответ

0 голосов
/ 22 марта 2011

Так что получается, что если вы используете django-model-utils и делаете наследование. Затем вы можете добавить inline для каждого из подклассов. Администратор Django это выяснит. Он покажет правильную форму для класса.

Проблема решена.

...