大家好,我有一個搜索功能,但是當使用 .objects.filter() 方法時,我得到一個顯示 ID 而不是用戶名的查詢集。這是視圖:def search_expense(request): if request.method == 'POST': search_str = json.loads(request.body).get('searchText') expenses = Expense.objects.filter( amount__istartswith=search_str) | Expense.objects.filter( date__icontains=search_str) | Expense.objects.filter( description__icontains=search_str) | Expense.objects.filter( category__icontains=search_str) data = expenses.values() return JsonResponse(list(data), safe=False)<QuerySet [{'id': 16, '金額': 2.33, '日期': datetime.date(2020, 10, 2), '描述': '某事', 'owner_id': 1 , '類別' : '食品'}]>因此,我需要將 'owner_id': 1 改為 'owner': username,而不是 'owner_id': 1模型(User模型是Django的標準模型):class Expense(models.Model): amount = models.FloatField() date = models.DateField(default=now) description = models.TextField() owner = models.ForeignKey(to=User, on_delete=models.CASCADE) category = models.CharField(max_length=255) def __str__(self): return self.category class Meta: ordering: ['-date']
1 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
您可以向 中添加新字段.values()
。
from?django.db.models?import?F fields?=?tuple(x.name?for?x?in?Expense._meta.get_fields()) data?=?expenses.values(*fields,?owner_name=F("owner__value"))
您還必須手動指定您想要的所有字段,或者如果您想要所有字段,那么您可以.get_fields()
像我一樣使用。
您必須將新字段命名為“owner”以外的其他名稱,否則您將得到ValueError
:
ValueError:?The?annotation?'owner'?conflicts?with?a?field?on?the?model.
.values()
根據文檔顯示ForeignKey字段的ID是預期的行為:
foo
如果您有一個名為a 的字段ForeignKey
,則默認values()
調用將返回一個名為 的字典鍵foo_id
,因為這是存儲實際值的隱藏模型屬性的名稱(該foo
屬性引用相關模型)。
添加回答
舉報
0/150
提交
取消