python - Django 管理面板、关系和只读字段
问题描述
我在 model.py 中有一个非常简单的方案
class Attachment(models.Model):
name = models.CharField(max_length=100,
verbose_name='name')
file = models.FileField(upload_to=settings.MEDIA_ROOT,
null=True,
verbose_name='file')
def __str__(self):
return self.name
class Document(models.Model):
title = models.CharField(max_length=250, blank=False)
attachment = models.ForeignKey('Attachment', null=True, on_delete=models.CASCADE)
date = models.DateField(blank=True)
approved = models.BooleanField(default=False)
def __str__(self):
return self.title
还有我的 admin.py
class DocumentAdmin(admin.ModelAdmin):
fieldsets = (
('GENERAL', {
'fields': ('title', 'attachment', 'date', 'approved')
}),
)
admin.site.register(Document, DocumentAdmin)
我正在努力解决两个问题:
首先,我想在 DocumentAdmin 界面中包含附件的字段。我在 Document 模型中创建了一个 get 方法。
def get_attachment_file(self):
return self.attachment.file
方法 get_attachment_file 在 list_display 中有效,但在 fieldset 中无效
list_display = ('get_attachment_file',)
另外,在“批准”设置为“真”之后,我想让“批准”和“日期”字段只读。
谢谢你们。
解决方案
您应该能够添加 get_attachment_file 并使其成为只读字段。要在批准设置为 True 后使批准和日期只读,您可以使用 get_readonly_fields 方法
def get_readonly_fields(self, request, obj=None):
readonly_fields = ('get_attachment_file',)
if obj and obj.approved:
readonly_fields += ('approved', 'date')
return readonly_fields
推荐阅读
- python - PyCharm 字符串替换“\'”
- sql - drupal 在哪里存储数据库中视图的临时更改以清除它?
- nginx - 将 http2_push 与 nginX 与 HAProxy 结合使用不起作用
- gcc - gcc如何使用ah,bh,ch,dh?
- android - 如何将字符串值传递给另一个活动以在媒体播放器 Android 上播放
- vb.net - 从 vb.net 解释脚本
- java - Selenium WebDriver Java - 尝试注销 Facebook,但在单击注销链接时弹出
- rest - 在 Wildfly Swarm 中为 REST API 配置 HTTPS 连接
- couchbase - Couchbase 视图过滤有问题
- r - 如果我在 R 中在总持续时间内有一系列尖峰时间,我如何获得非均匀尖峰的光栅图?