如何通过Django中的自定义admin操作获取关联的模型?

金·斯塔克斯(Kim Stacks)

此问题的第2部分分别提出和回答。

我有一个Report和一个ReportTemplate

+----+----------+---------------+-------------+
| id |  title   |     data      | template_id |
+----+----------+---------------+-------------+
|  1 | report 1 | {data: [...]} |           1 |
+----+----------+---------------+-------------+

reports table

+----+-----------+---------------+------------+
| id |   title   |    markup     |    css     |
+----+-----------+---------------+------------+
|  1 | template1 | <doctype!>... | body {.... |
+----+-----------+---------------+------------+

templates table

报表属于ReportTemplate。一个ReportTemplate有很多Report。

我有一个admin.py名为的自定义管理员操作print_as_pdf

class ReportAdmin(admin.ModelAdmin):
    fields = ['commodity', 
    'date',
    'trade_period',
    'quantity_cutoff',
    'data',
    'template',
    'title']

    actions = ['print_as_pdf']

    def print_as_pdf(self, request, queryset):
        return
    print_as_pdf.short_description = 'Generate as pdf'

这些是模型:

class ReportTemplate(models.Model):
    title = models.CharField(max_length=50)
    markup = models.TextField(default = 'markup here...')
    styles = models.TextField(default = 'styles here...')

    # __unicode__ on Python 2
    # __str__ on Python 3
    def __unicode__(self):
        return self.title

class Report(models.Model):
    title = models.CharField(max_length=50)
    commodity = models.CharField(max_length=10)
    date = models.DateTimeField('date traded')
    trade_period = models.CharField(max_length=10, default='open')
    quantity_cutoff = models.IntegerField(default=0)
    printed = models.BooleanField(default=0)
    datetime_email_sent = models.DateTimeField('date email sent', blank=True, null=True)
    data = models.TextField(default = 'data here...')
    template = models.ForeignKey(ReportTemplate)

我想做的是:

  1. 检索关联的ReportTemplate及其markup字段值
  2. data报告字段值通过markup使用jinja2标记编写值1放入
  3. 使用weasyprint并将2中的数据填充标记打印为pdf

我陷入了第一步。

给出的参数selfrequestqueryset,我怎么检索相关ReportTemplate及其markup字段值?

更新1:

我试图以此来测试给出的答案之一。

import logging

logger = logging.getLogger(__name__)

# .... code here ...

def print_as_pdf(self, request, queryset):
        for report in queryset:
            markup = report.template.markup
            logger.debug(markup)
        return

更新2:

# Logging
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/var/virtual/WebApps/virtualenvs/WeasyPrintProject/weasyprint_site/debug.log',
        },
    },
    'loggers': {
        'reports.admin': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

在我的settings.py中写了这个

生成一个debug.log

但是,debug.log的内容为空

更新3:

需要明确改变

logger = logging.getLogger(__name__)

logger = logging.getLogger('reports.admin')
双体船

只需获取模型template字段即可Report

def print_as_pdf(self, request, queryset):
    for report in queryset:
        markup = report.template.markup
        ...
print_as_pdf.short_description = 'Generate as pdf'

更新:要使用记录器,应在源文件的开头添加以下两行:

import logging

logger = logging.getLogger(__name__)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Django Admin中向更改模型表单添加自定义操作?

在Alfresco的自定义模型中获取关联文档的路径

如何通过编写新的admin.ModelAdmin在Wagtail 1.8中创建自定义用户模型?

如何从Django Admin的response_change中获取自定义表单字段值?

如何从Laravel中的自定义方法获取当前模型

如何使用prefetch_related在admin list_display中获取自定义列的相关模型?

如何绕过Django模型中的自定义ModelManager

如何在使用自定义用户模型时修复django admin中的“无法解压不可迭代的NoneType对象”错误

Django admin中的自定义验证

django admin中的自定义项

Django:Django admin中未出现“自定义用户模型”字段

如何自定义 Django 用户模型?

Django 模型中的自定义 ID

在django admin中对模型中的自定义字段进行排序

django admin中未显示自定义用户模型字段(AbstractUser)

自定义用户模型不遵循 django admin 中扩展的 BaseUserManager 实现

JointJS-自定义LinkView:如何与我的自定义模型关联?

Magento:通过自定义字段获取我的模型的记录

如何在admin中忽略自定义模型管理器和重写的delete方法?

react-admin:如何自定义批量操作

Sonata Admin中的自定义批处理操作

如何在React Admin中获得自定义操作的响应

如何在Rails Admin中创建自定义批量操作?

如何在IdentityServer3的自定义ViewService中的自定义操作中获取ClientId?

如何通过请求从我的自定义表单的输入文本字段中获取值:Django 3.0?

如何在sqlalchemy模型中添加自定义函数/方法来执行CRUD操作?

Django-如何使用get_object_or_404获取自定义用户模型

如何获取django-all auth将数据传递到自定义用户模型?

Django-如何将自定义对象分配为模型属性并在该对象中获取该模型实例?