Трясогузка: внешний ключ для значения поля потока

Я хотел бы разрешить раскрывающийся список в администраторе трясогузки для выбора из значений (блоков), содержащихся в поле потока другой модели, возможно ли это? Я представлял что-то вроде:

Feedback(page):
    paper = models.ForeignKey('PaperPage', on_delete=models.CASCADE, null=True, blank=False, help_text="The paper associated with this feedback. Auto assigned.")

    content_panels = [
        InlinePanel('paper__drafts_id', label='Draft')   <--- this doesn't work
    ]

куда

Paper(page):
    drafts = StreamField(
            [
                ('draft_block', blocks.ListBlock(blocks.StructBlock([
                    ('date', blocks.DateTimeBlock(required=True, label='Date draft uploaded')),
                    ('uploaded_by', MemberBlock(required=False, label='Uploaded by',
                                                help_text="Who is uploading this draft.")),
                    ('draft_file', DocumentChooserBlock(required=False, label='Upload file')),

                ]), template='papers/blocks/drafts.html')),
            ],
            blank=True
        )

но я не уверен, что это вообще возможно? Любые предложения будут высоко оценены. Спасибо!


person Liz    schedule 15.02.2019    source источник


Ответы (1)


Это один из недостатков StreamField — данные хранятся не как «настоящие» объекты базы данных, а только как текст JSON, хранящийся на странице, поэтому нет возможности определить отношения, такие как ForeignKey, указывающие на отдельные элементы в этих данных.

Если в потоке есть только один тип блока, как в вашем примере кода, то вместо этого было бы лучше определить «черновик» как дочерний объект (с InlinePanel) в модели Paper; тогда она будет существовать как настоящая модель базы данных.

person gasman    schedule 19.02.2019
comment
Спасибо, @gasman, это то, что я использовал на данный момент, и оно работает хорошо, просто любопытно, есть ли какие-то доступные функции, которые я упустил из виду. Спасибо за чудесный фреймворк!! - person Liz; 20.02.2019