0

I am trying to understand the Django Rest Framework. As a beginner here, what I am trying is to call a method from a Model and update the value in the template. I am trying it from views_api.py with an ajax call. I was able to get other values, but I couldn't get three values.

Here is what I have so far.

reviews/models.py

class Review(TimeStampedModel):
    project = models.ForeignKey('projects.Project', on_delete=models.CASCADE, related_name='reviews')
    fiscal_year = models.PositiveIntegerField(null=True, blank=True, db_index=True)
    fiscal_month = models.PositiveIntegerField(null=True, blank=True, db_index=True)
    has_validation = models.BooleanField('Has PFK', default=False)
    review_date = models.DateField(help_text='Date of the PFK', db_index=True)
    wp_validation_deadline = models.DateTimeField(blank=True, null=True, help_text='Deadline to validate WP')
    cutoff_date = models.DateTimeField(db_index=True,
                                       help_text='Up to when actuals are considered (date after accruals were entered)')
    fct_n_amount = models.DecimalField('FCT n amount', decimal_places=2, max_digits=12, null=True, blank=True)
    actuals_amount = models.DecimalField('Actual revenue traded', decimal_places=2, max_digits=12, null=True,
                                         blank=True, help_text='Cost to date (from monthly projectsales.xlsx)')

    events_amount = models.DecimalField('Total Events', decimal_places=2, max_digits=12, null=True, blank=True,
                                        help_text='In project currency (will be displayed in Thousands)')
    risks_real_amount = models.DecimalField('Total Risks - Most Likely', decimal_places=2, max_digits=12, null=True,
                                            blank=True,
                                            help_text='In project currency (will be displayed in Thousands)')
    risks_max_amount = models.DecimalField('Total Risks - Maximum', decimal_places=2, max_digits=12, null=True,
                                           blank=True,
                                           help_text='In project currency (will be displayed in Thousands)')
    opportunities_amount = models.DecimalField('Total Opportunities', decimal_places=2, max_digits=12, null=True,
                                               blank=True,
                                               help_text='In project currency (will be displayed in Thousands)')

    cje0_report = models.ForeignKey('sap.CJE0Report', verbose_name='CJE0 report', blank=True, null=True,
                                    on_delete=models.SET_NULL)
    # cji3_report = models.ForeignKey('sap.CJI3Report', blank=True, null=True, on_delete=models.SET_NULL)
    cji5_report = models.ForeignKey('sap.CJI5Report', verbose_name='CJI5 report', blank=True, null=True,
                                    on_delete=models.SET_NULL)
    fnl1_report = models.ForeignKey('sap.FNL1Report', verbose_name='FBL1N report', blank=True, null=True,
                                    on_delete=models.SET_NULL)
    hidden = models.BooleanField(default=False)
    is_frozen = models.BooleanField(default=False)
    revenue_frozen = models.BooleanField(default=False) #Bix-13280

    objects = VisibleManager()
    
    def get_cutoff_date_display(self):
        previous_month = self.review_date.replace(day=1) - datetime.timedelta(days=1)
        return previous_month

    def get_top_cje0(self):
        if not self.cje0_report:
            return None
        return 
        self.cje0_report.cje0element_set.filter(psp_element__code=self.project.code).first()

reviews/serializer.py

class ReviewSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Review
        fields = '__all__'

reviews/views_api.py

class SwaitchReviewViewSet(viewsets.ReadOnlyModelViewSet):          
    queryset = Review.objects.all()
    serializer_class = ReviewSerializer
    authentication_classes = []
    permission_classes = [AllowAny, ]

project_details.html

{% load static %}
{% load humanize %}
{% load strings %}
{% load django_bootstrap_breadcrumbs %}
{% load guardian_tags %}
{% load project_permissions %}
{% block header%}
{% endblock header%}
<div class="modal fade downloadPopupWrapper reviewsPopup" id="switchReview" tabindex="-1" role="dialog" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="exampleModalCenterTitle">Reviewssssssssssssssssssssss</h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <img src="{% static 'image/icon-close.svg' %}" alt="">
                        </button>
                    </div>
                    <div class="modal-body download_tableWrapper">
                    
                        <div class="tab-content" id="myTabContent">
                            <div class="tab-pane fade show active" id="reviews" role="tabpanel" aria-labelledby="reviews-tab">
                                <div class="table-responsive">
                                    <table class="table table-striped">
                                        <thead>
                                           
                                            <tr>
                                                <th scope="col">Fiscal Period</th>
                                                <th scope="col">Cut-off</th>
                                                <th scope="col">Review Date </th>
                                                <th scope="col">FCT (n-1) [CJE0]</th>
                                                <th scope="col">Actuals [CJE0]</th>
                                                <th scope="col"
                                                class="text-center"
                                                data-toggle="tooltip"
                                                data-placement="top"
                                                title="Review is frozen">Frozen
                                            </th>
                                            <th scope="col"
                                                class="text-center"
                                                data-toggle="tooltip"
                                                data-placement="top"
                                                title="PFK review">PFK
                                            </th>
                                            </tr>
                                        </thead>
                                        <tbody id = "tablebody">
                                          
                                           
                                        </tbody>
                                    </table>
                                </div>
                            </div>
     
                        </div>
                    </div>
                </div>
            </div>
        </div>

    {% block scripts %}
        <script>
            document.getElementById('switchReviewBtn').addEventListener('click', function (e) { 
                
            $.ajax({
                type: 'GET',
                url: "{% url 'reviews-list' %}",
                
                success: function (res) {
                    let table_data = ''
                    console.log(res);
                    res.forEach(element => {
                        console.log(element.id)
                        table_data += '<tr data-id="'+element.id+'" class="'
                        if(element.has_validation){
                            table_data += 'is-pfk'
                        }
                        if(element.is_frozen){
                            table_data += ' muted'
                        }
                        table_data += '"><td>' + element.fiscal_year + '-' + element.fiscal_month + '</td>'
                        table_data += '<td>' + element.get_cutoff_date_display + '</td>'
                        table_data += '<td>' + element.review_date + '</td>'
                        table_data += '<td>' + element.get_top_cje0.plan_v0 + '</td>'
                        table_data += '<td>' + element.get_top_cje0.actual + '</td>'
                        if(element.is_frozen){
                            table_data += '<td class="text-center">' + '<i class="fas fa-lock" data-toggle="tooltip" data-placement="top" title="Review is frozen">' + '</i>'
                            };
                        if(element.has_validation){
                            table_data += '<td class="text-center">' + '<img src="/static/admin/img/icon-yes.svg" alt="" data-toggle="tooltip" data-placement="top" title="PFK review">'
                            };
                        table_data +='</tr>'
                    });
                    // console.log(table_data)
                    $("#tablebody").html(table_data);
                 
                },
        
                errors: function (response) {
                    console.log(response.responseJSON.errors)
                }
            });
        }); 
            
    </script>
   
{% endblock scripts %}

I'm trying to call the methods element.get_cutoff_date_display, element.get_top_cje0.plan_v0, and element.get_top_cje0.actual in the above file, but I'm not getting any results. I couldn't find the right way to do this. I'm sure I have things wrong. May I get any possible solution to this?

SN Prasad
  • 1
  • 1
  • Does this answer your question? [ModelSerializer using model property](https://stackoverflow.com/questions/17066074/modelserializer-using-model-property) – NKSM Sep 19 '22 at 07:29
  • @NKSM Thank you for your reply. I can handle things to some extent. however I'm still unable to retrieve the values-- **get top cje0.actual and get top cje0.plan v0** – SN Prasad Sep 23 '22 at 04:53

0 Answers0