我有一张表格如下 -
name| age |
----|-----|
A | 50 |
B | 60 |
C | 70 |
我的模型类是 -
class Persons(models.Model):
p_id = models.AutoField(primary_key=True)
p_name = models.CharField(max_length=32, null=False)
p_age = models.IntegerField(null=False)
objects = ManagerEx()
class Meta:
db_table = u'persons'
我想查询表格,如 -
persons = Persons.objects.all()
但名称应该用'anonymous'覆盖,以便每个人对象p_name的评估结果为'anonymous'
for person in persons:
name = person.p_name # For all objects name should equal to 'anonymous'
我怎样才能做到这一点?
答案 0 :(得分:0)
如果您想在模板中执行此操作,只需:
<Table>
<Th>
<Td>Name</Td>
<Td>Age</Td>
</Th>
{% for person in persons %}
<Tr>
<Td>Anonymous</Td>
<Td>person.p_age</Td>
</Tr>
{% endfor %}
</Table>
如果您想在视图中执行此操作,可以使用原始查询执行此操作,如您在评论中所述。
答案 1 :(得分:0)
您可以使用annotate
:
from django.db.models import Value, CharField
def get_anonymous:
persons = Persons.objects.all()
return persons.annotate(p_name=Value('anonymous', output_field=CharField()))
(使用CharField作为输出,因为与您在Persons
模型中使用的类型相同
或者如果您希望有一些条件(仅隐藏孩子的名字):
return queryset.annotate(
p_name=Case(When(
p_age__gte=18,
then=F('p_name')),
default=Value('anonymous'),
output_field=CharField()
))
在第二种情况下,请记住还要从Case
导入When
和django.db.models