Трясогузка: внешний ключ к значению поля потока
Я хотел бы позволить раскрывающемуся внутри администратора трясогузки выбирать значения (блоки), содержащиеся в поле потока другой модели, это возможно? Я представил что-то вроде:
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
)
но я не уверен, возможно ли это вообще? Любые предложения будут наиболее ценными. Спасибо!
1 ответ
Решение
Это один из недостатков StreamField
- данные хранятся не как "истинные" объекты базы данных, а только как текст JSON, хранящийся на странице, поэтому нет способа определить отношения, такие как ForeignKey
указывает на отдельные элементы в этих данных.
Если в потоке есть только один тип блока, как в вашем примере кода, то было бы лучше определить "черновик" как дочерний объект (с InlinePanel
) вместо бумажной модели; тогда он будет существовать как истинная модель базы данных.