如何在 Django 中使用访问器?

问题描述

我已经阅读了以前的 Q 和文档,但仍然无法使其工作..

我有以下型号:

class Process(models.Model):
    class Meta:
        verbose_name_plural = "Processes"
    name =  models.CharField(max_length=120)
    description = models.CharField(max_length=4)
    parent_process =  models.ForeignKey('self',related_name="parent_process+",on_delete=models.PROTECT,blank=True,null=True,verbose_name="parent process")
    process_activities = models.CharField(max_length = 2048,verbose_name="process activites")
    owner = models.ForeignKey(User,related_name="owner+",verbose_name="owner")

    def __str__(self):
        return "{}".format(self.name)

class ControlTest(models.Model):
    history = AuditlogHistoryField()
    name = models.CharField(max_length=120)
    description = models.CharField(max_length=120)

现在我想使用访问器来访问进程的名称显示一个表中(tables.py):

class controltestTable(tables.Table):
    class Meta:
        hoofdproces = tables.Column(accessor='process.name')

        model = ControlTest
        fields = ['id',"name","hoofdproces","sub_process",'description','control','delegate','owner','reviewer1','reviewer2','reviewer1_r','reviewer2_r','delegate_r','owner_r','reviewer_status','status','history','comments','review_comments','due_date','review1_due_date','review2_due_date','documentation']
        template_name = "django_tables2/bootstrap-responsive.html"

Views.py:

class ControlTestView(SingleTableView,FormView,SingleTableMixin,FilterView):
    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        queryset = kwargs.pop('object_list',None)
        if queryset is None:
            self.object_list = self.model.objects.all()
        context['controltests'] = ControlTest.objects.all()
        return context
    
    def post(self,request,*args,**kwargs):
        form = self.get_form()
        print(form)
        if form.is_valid():
            instance = form.save(commit=True)
            instance.save()
            print('valid')
            return self.form_valid(form)
        else:
            print(form.errors)
            return self.form_invalid(form)


    template_name = "control/ControlTest.html"
    model = ControlTest
    form_class = ControlTestForm
    table_class = controltestTable
    success_url = reverse_lazy('controltest')

但是,hoofdproces 列中没有显示任何内容:(

这怎么可能?我做错了什么?

请帮忙!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)