我有一个遗留数据库,我已经设置了一些模型可供使用。模型看起来像这样:
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True, db_column='uid')
email = models.CharField(max_length=255, unique=True)
username = models.CharField(unique=True, max_length=150)
class Meta:
db_table = u'legacy_user'
class OtherModel(models.Model):
user = models.ForeignKey('my_app.UserProfile', db_column='uid')
some_data = models.IntegerField()
another_model = models.ForeignKey('other_app.AnotherModel', db_column='related')
class Meta:
db_table = u'legacy_other_model'
当我执行此查询集时:
my_user = UserProfile.objects.get(username='foo')
count = OtherModel.objects.filter(user=my_user).count()
我得到的SQL看起来像:
SELECT COUNT(*) FROM `legacy_other_model` WHERE `legacy_other_model`.`uid` = None
但如果我将计数查询更改为此(请注意 .pk ):
count = OtherModel.objects.filter(user=my_user.pk).count()
我得到的SQL看起来像:
SELECT COUNT(*) FROM `legacy_other_model` WHERE `legacy_other_model`.`uid` = 12345
这似乎不是预期的行为,请查看:http://docs.djangoproject.com/en/dev/topics/db/queries/#queries-over-related-objects
我的模特中是否设置了错误的内容?
答案 0 :(得分:0)
怀疑您可能需要在OneToOne定义中指定to_field
:
user = models.ForeignKey('my_app.UserProfile', db_column='uid', to_field='user')
这有帮助吗?
答案 1 :(得分:0)
此时,我相信这是Django中的一个错误。
为了将来参考,我在此报告: http://code.djangoproject.com/ticket/15164