向Django查询集的对象添加额外的字段和值

时间:2019-06-23 16:59:42

标签: django django-models django-templates django-views

让以下模型:

class Books(models.Model):
    b_name = models.CharField(max_length=10)
    b_page = models.IntegerField()

我想要基于视图中的登录用户和其他模型对象添加一个具有不同值的额外字段

另一个模型如下所示,我要在模型“书籍”中附加的taken_on值:

class BookTakerInfo(models.Model):
    user = models.CharField(max_length=25)
    book_taken = models.CharField(max_length=25)
    taken_on = models.CharField(max_length=25)

然后将其渲染到模板,以便可以像下面这样使用它:

{% for b in books_qs %}
    {{b.extra_field}}
{% endfor %}

可能在这样的视图中:

qs = Books.objects.filter(...)
for q in qs:
    obj = BookTakerInfo.objects.filter(...).first()
    q.add("taken_on", obj.taken_on)

并且由于值是不同的,并且取决于用户和日期,所以我不能为此任务使用模型字段。因此,请为我提供一些解决方案。 请帮助!!!!

1 个答案:

答案 0 :(得分:0)

您可以为此目的使用annotate()F

from django.db.models import F


qs = Books.objects.filter(...).annotate(related_value=F('related_object__value'))

# In the end, you can access the annotated value like this:
qs.first().related_value

这是您可以根据需要添加相关对象的整数值的方法。