をクエリセットI以下のモデルがあります:Djangoの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
でクエリセットに注釈を付けるにしたいです。複数のUserCompany
オブジェクトがある場合は、end_date
がなくても問題ありません。いずれも問題ありません。
私は以下のようなraw SQLサブクエリを試してみましたが、うまくいくようですが、これを行うより効率的な方法があるのだろうか?私はDjango 1.11+にSubquery
という表現があることを知っていますが、私が使用しているDjangoのバージョンはそれをサポートしていないので、今はアップグレードしたくありません。
私のソリューション:
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')
)
私はDjangoの1.9.8、Pythonの2.7.13とMySQLを使用しています。ありがとう!
これらの会社関連フィールドを使用するにはどうしますか? –
ユーザデータをhtmlテーブルに表示する。 – Ivan