을의 검색어 나는 다음과 같은 모델이 있습니다장고 ORM 사용자에게 현재의 회사를 주석이
class UserCompany(models.Model):
user = models.ForeignKey(User)
company_name = models.CharField(max_length=200)
department = models.CharField(max_length=200)
position = models.CharField(max_length=200)
start_date = models.DateField()
end_date = models.DateField(null=True, blank=True)
단일 사용자가 여러 UserCompany
객체를 가질 수 있습니다.
는 지금은 모든 사용자를 조회 company_name
, department
, position
과 end_date
이 null
입니다 start_date
와의 검색어에 주석을합니다. end_date
이없는 UserCompany
개체가 하나 이상 있으면 걱정하지 않아도됩니다.
나는 아래와 같은 원시 SQL 하위 쿼리를 시도했지만 작동하는 것처럼 보였지만이 작업을 수행하는 효율적인 방법이 있는지 궁금하다. 원시 SQL을 사용하지 않고 이것을 작성해야한다. 나는 장고 1.11+에서 Subquery
표현이 있다는 것을 알고 있지만 사용중인 장고의 버전은 그것을 지원하지 않으며 나는이 순간에 업그레이드하고 싶지 않습니다.
내 솔루션 :
from django.db.models.expressions import RawSQL
def create_rawSQL(field):
return RawSQL(
"SELECT `myapp_usercompany`.`%s` FROM `myapp_usercompany` WHERE `myapp_usercompany`.`user_id` = `auth_user`.`id` AND `myapp_usercompany`.`end_date` IS NULL LIMIT 1" % field,()
)
users = User.objects.all().annotate(
company_name=create_rawSQL('company_name'),
position=create_rawSQL('position'),
department=create_rawSQL('department'),
start_date=create_rawSQL('start_date')
)
내가 장고 1.9.8, 파이썬 2.7.13와 MySQL을 사용하고 있습니다. 감사!
해당 회사 관련 필드는 무엇을 사용 하시겠습니까? –
html 테이블에 사용자 데이터를 표시합니다. – Ivan