【问题标题】:How can I fill a table view based on some calculous, resorting to django?如何根据一些计算,诉诸 django 来填充表格视图?
【发布时间】:2021-08-12 11:20:53
【问题描述】:

所以我正在启动一个 django web 应用程序并且我是使用 django 的新手...所以请耐心等待我。 所以,在我的项目中,我有两个观点: 1- 用户资料; 2- 一种计算器,可以根据用户输入同时给出多个结果

所以,首先,这是我的 model.py:

class Calanalisis(models.Model):
    sequence = models.CharField(max_length=120000)
    gc_content = models.DecimalField(decimal_places=3, max_digits=1000)


    def gc_content_cal(self):
        if self.sequence == True:
           gc_content= round((self.sequence.count('C') + 
           self.sequence.count('G'))/len(self.sequence) * 100,1)
           return gc_content

forms.py:

class AddSequenceForm(forms.ModelForm):
    class Meta:
        model = Calanalisis
        fields = ('sequence',) 

views.py:

def calc_sequence(request):

    sequence_items=Calanalisis.objects.filter(person_of=request.user)
    form=AddSequenceForm(request.POST)
    if request.method=='POST':
        form=AddSequenceForm(request.POST)
        if form.is_valid():
            profile=form.save(commit=False)
            profile.person_of = request.user
            profile.save()
            return redirect('calc_sequence')
    else:
        form=AddSequenceForm()

    myFilter=SequenceFilter(request.GET,queryset=sequence_items)
    sequence_items=myFilter.qs
    context = {'form':form,'sequence_items':sequence_items,'myFilter':myFilter}
    return render(request, 'Add_Calc.html', context)

现在我要介绍要在表中计算的gc_content_cal。当我介绍序列时,序列出现在表中,但 gc_content_cal 仍然为 0,如图所示。

有人可以帮帮我吗?

这是我的模板:base.html

{% block content %}
<div class="container">
<div class="row">
    <div class="col-lg-6">
    <div class="login">
        <div class="login-screen">
            <form method="POST" action="" class="login-form form-inline">
              {% csrf_token %}
              
                {% for field in form %}
                <h5 class="form-labels">
                {{ field.label }}
                </h5>
                {{ field }}
                 
                {% endfor %}
           
                <input class="btn mt-2" type="submit" value="select">

            </form>
           
        </div>
    <table class="table table-bordered text-center mt-3">
            <thead class="thead-dark">
                <tr>
                    <th scope="col">Sequence</th>
                    <th scope="col">GC</th>
      
                </tr>
        </thead>
        <tbody>
            {% for oligoseq in sequence_items %}
            <tr>
                <td>{{ oligoseq.sequence }}</td>
                <td>{{ oligoseq.gc_content }}</td>

            </tr>
            {% endfor %}
            </tbody>
        </table>  
    </div>
</div>
</div>
{% endblock content %}

【问题讨论】:

  • 您也可以发布您的模板吗?
  • @MatthewBarlowe 刚刚添加了我的模板

标签: python-3.x django windows


【解决方案1】:

你必须把你想在模板上显示的东西放在渲染函数中。

【讨论】:

  • 我已经有排序出现了,但是如何调用de函数来计算GC值并放在桌子上呢?
  • 您能否添加一些 OP 应使用的代码示例以实现此目的?因为这个答案不是很有帮助。
【解决方案2】:

您需要像这样在模板中调用gc_content_cal 模型方法。

<tbody>
{% for oligoseq in sequence_items %}
  <tr>
    <td>{{ oligoseq.sequence }}</td>
    <td>{{ oligoseq.gc_content_cal }}</td>
  </tr>
{% endfor %}
</tbody>

当您拥有它时,模板只会访问模型的 gc_content 属性,根据您的输出判断,该属性设置为值 0。 gc_content_cal 不会在您的 gc_content 属性中存储值,它只是根据 sequence 属性中的内容返回一个值。

【讨论】:

    【解决方案3】:

    我想通了,问题所在。我创建了一个保存类对象的函数。像这样:

    class Calanalisis(models.Model):
        sequence = models.TextField()
        gc_content = models.FloatField(default=0,null=True,blank=True)
        person_of = models.ForeignKey(User,null=True,on_delete=models.CASCADE)
    
        def save(self, *args, **kwargs):# new
            if self.sequence != None:
                self.gc_content = gc_content(self.sequence) #round((self.sequence.count('C') + self.sequence.count('G'))/len(self.sequence) * 100,1) if self.sequence else 0
                
    
            super(Calanalisis,self).save(*args, **kwargs)
    

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2018-09-17
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多