Вычисление значений из различных моделей Django

У меня есть 2 похожие модели django, разница между ними в том, что одна из них имеет Foreign key с другой моделью, а другая - как общая модель.

class Project: 
  name = models.CharField(default='',max_length=100,verbose_name="name")

class Article(models.Model):    
    code = models.CharField(default='',max_length=20,verbose_name="Norma")
    name = models.TextField(default='',verbose_name="Denumire")
    project = models.ForeignKey(Project,on_delete=models.CASCADE,null=True)
    quantity = models.FloatField(default=0,verbose_name="Quantity")
    value = models.FloatField(default=0,verbose_name="Value")

class BaseArticle(models.Model):
    code = models.CharField(default='',max_length=20,verbose_name="Norma")

    name = models.TextField(default='',verbose_name="Denumire")
    
    price = models.FloatField(default=0,verbose_name="Price")

Я хочу вычислить значение атрибута из модели статьи, это должно выглядеть так:

if article.code == basearticle.code:
     article.value = article.quantiy * basearticle.price

Как я должен делать этот тип вычислений? Должен ли я написать логику в файле views.py?

views.py:

class ProjectDetail(LoginRequiredMixin, DetailView):   
    template_name = "proiecte/project_detail.html"
    context_object_name = "projects"
    model = Project

В шаблоне я использую {% for article in projects.article_set.all %} для генерации таблицы, которая имеет все атрибуты в качестве заголовков.

ок, исходя из вашего понимания, вы можете сделать так

class Article(models.Model):    
    code = models.CharField(default='',max_length=20,verbose_name="Norma")
    name = models.TextField(default='',verbose_name="Denumire")
    project = models.ForeignKey(Project,on_delete=models.CASCADE,null=True)
    quantity = models.FloatField(default=0,verbose_name="Quantity")
    value = models.FloatField(default=0,verbose_name="Value")


    def clean(self):
        values =Article.objects.get(code='P1').quantity*BaseArticle.objects.get(code = 
        Article.objects.get(code='P1')
       return value

Поскольку вы можете получить доступ к своему чистому методу в любом месте, так как он является экземпляром класса в представлениях

class ProjectDetail(LoginRequiredMixin, DetailView):   
    template_name = "proiecte/project_detail.html"
    context_object_name = "projects"
    instance = Article.objects.get(pk=id)
    value =instance.clean()
    # your logic 
Вернуться на верх