@ColdSpirit

Как в django передать ид объекта его же полю в админке?

Собственно есть модель новости, установил ckeditor (это не очень важно, можете представить обычное поле, но с обработчиком), поставил его как поле в модель. При открытии в админке нужно, чтобы в поле ckeditor передавался ид этой новости.
from django.db import models
from ckeditor_uploader.fields import RichTextUploadingField

# вот примерно как сейчас
class Page( models.Model ):
	title = models.CharField( verbose_name="Заголовок")
	content = RichTextUploadingField( verbose_name="Текст" )

# вот как хотелось бы, но так не выйдет, т.к. объекта еще нет, всего лишь описывается класс
class Page( models.Model ):
	title = models.CharField( verbose_name="Заголовок")
	content = RichTextUploadingField( verbose_name="Текст", page_id=self.id )


Совсем запутался уже в классах, не пойму с какого конца начать, т.к. всё управление объектами происходит в view админки, но по-хорошему его бы не трогать, хочется написать код модели\поля так, чтобы их объекты сами разобрались.

# дополнение
Получить ид я могу только после создания объекта модели (не путаем с записью в бд). Джанго парсит мое описание Page, создает переменные, и только после этого я могу получить доступ к ключу. Вопрос в том, как получить и передать ключ в поле до того, как джанго начнет парсить мое описание класса.
class Page( models.Model ):
    title = models.CharField( verbose_name="Заголовок")
    content = RichTextUploadingField( verbose_name="Текст" )

    def __init__(self, *args, **kwargs):
        #print(self.id) # AttributeError: 'Page' object has no attribute 'id'
        super(Page, self).__init__(*args, **kwargs)
        print(self.id) # выведет ид
  • Вопрос задан
  • 1712 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Попробуйте передать id через виджет формы при инициализации

admin.py

from forms import PageForm

@admin.register(Page)
class PageAdmin(admin.ModelAdmin)
     form = PageForm
     model = Page


forms.py

class PageForm(forms.ModelForm)
     def __init__(self, *args, **kwargs):
          super(PageForm, self).__init__(*args, **kwargs)
          if self.instance:
                self.fields['content'].widget=RichTextUploadingField( verbose_name="Текст", page_id=self.instance.id )
...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
Сложно сказать сработает или нет

Добавляем в модель поле uuid
В ModelForm поле сразу же инициализирируем
from uuid import UUID

А вот как связать все с редактором - не знаю

Также можно в админке при каждом обращении создавать uuid и подпихивать его
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы