django - 我正在优化我的 django 项目后端,但是在包含 ForeignKey 的“list_display”上遇到了很多问题
问题描述
世界各地的 django 大师我是韩国开发人员,3 个月前开始使用 django。
现在我只是我公司的奴隶。无论如何,我在优化 django 管理项目时遇到了问题,但没有人遇到过同样的问题。
这是我的模型“项目”、“答案”、“请求”。
# ------------------------------------------------------------------
# Model : Project
# Description : project model
# ------------------------------------------------------------------
class Project(models.Model):
class Meta:
verbose_name = ' project'
verbose_name_plural = ' project'
def __str__(self):
return str(self.id)
# ------------------------------------------------------------------
# Model : Request
# Description : Request model
# ------------------------------------------------------------------
class Request(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, verbose_name='client')
project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name='project')
product = models.ForeignKey(Subclass, on_delete=models.CASCADE, verbose_name='product')
category = models.ManyToManyField(Develop, verbose_name='category')
name = models.CharField('name', max_length=256, blank=True, null=True)
price = models.CharField('price', max_length=256, blank=True, null=True)
day = models.CharField('duedate', max_length=256, blank=True, null=True)
content = RichTextUploadingField('content', null=True)
file = models.FileField('file', upload_to=request_update_filename, blank=True, null=True)
created_at = models.DateTimeField('created_at', default=time)
add_meeting = models.BooleanField('add_meeting', default=False, null=True)
examine = models.BooleanField('check examing', default=False, null=True)
active_save = models.BooleanField('active-save', default=True, null=True)
class Meta:
verbose_name = ' request'
verbose_name_plural = ' requests'
def __str__(self):
return str(self.name)
class Answer(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, verbose_name="client")
project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name="project", null=True)
partner = models.ForeignKey(Partner, on_delete=models.CASCADE, verbose_name="partner")
class Meta:
verbose_name = ' Answer'
verbose_name_plural = ' Answer'
def __str__(self):
return str(self.id)
and this is my admin code
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
inlines = [RequestInline,AnswerInline]
list_display = ['request_name','client_email','project_price','project_created','count_answer','count_meeting','answer_status']
def request_name(self, obj):
project_id = obj.id
request_name = Request.objects.get(project = project_id)
return request_name
def client_email(self, obj):
project_id = obj.id
client = Request.objects.get(project=project_id).client
return client
def client_phone(self, obj):
project_id = obj.id
client = Request.objects.get(project=project_id).client
phone = User.objects.get(username=client).phone
return phone
def project_price(self, obj):
project_id = obj.id
request_price = Request.objects.get(project=project_id).price
return request_price
def project_created(self, obj):
project_id = obj.id
created_at = Request.objects.get(project=project_id).created_at
return created_at
def count_answer(self, obj):
project_id = obj.id
answer_qs = Answer.objects.all()
answer = Answer.objects.filter(project=project_id)
count = len(answer)
return count
def count_meeting(self, obj):
project_id = obj.id
answer_yes = Answer.objects.filter(project = project_id, state = 1)
count = len(answer_yes)
return count
def answer_status(self, obj):
project_id = obj.id
answer = Answer.objects.filter(project = project_id, info_check =1)
count = len(answer)
return count
上面没有包含很多因素,但是我要解决的不是引入同一个queryset(Request, Answer)。项目本身是一个结构,没有属性,只能由外键接收。这样的结构使得很难找到解决方案。
我使用了 select_related(prefetch_related too),但它不起作用。
如果你能给我一些建议,我愿意接受一些建议。谢谢。
ps 这是我第一次在这个网站上提问,如果有任何粗鲁的地方,我很抱歉。
解决方案
admin.TabularInline
将在管理详细信息页面中显示可能对您有所帮助的反向外键,但似乎您已经在ProjectAdmin
.
推荐阅读
- html - 如何在相对父容器中包含绝对子容器
- php - PHP - 遍历文件并为 JSON 分解文本块
- arrays - Julia 1.1 如何使用JDL或JDL2主动将索引矩阵数据写入磁盘文件?
- r - 如何为几列添加 ggplot2 图例?
- sql-server - 找不到存储过程 ISDATE
- markdown - 可以使用 pandoc 为降价生成控制台突出显示吗?
- reactjs - 需要帮助设计 MaterialUI MenuItem 组件
- sql - SQL如何加入2个表并返回具有特定过滤器的行
- python-3.x - 如何使用 Python 检测 Opencv 中的黑框
- exception - PHPMailer 最近停止通过 gmail 发送电子邮件