我的模型通过名为person的外键与另一个模型有关系。该模型看起来像:
class PR(models.Model):
p_keyid = models.IntegerField(primary_key=True)
r_no = models.IntegerField(null=True, blank=True)
person = models.ForeignKey('person.Person', db_column = 'person_no')
recall_dt = models.DateTimeField(null=True, blank=True)
class Meta:
managed = False
db_table = 'person_r'
请注意,“托管”元素为假(并且它不是我创建的表格)。
有时person_no
表中的person_r
值不存在。例如,PR.person
的值为232.但是,id为232的人不存在(外键指向不存在的对象)。如何过滤 out 这样糟糕的PR实例?
在我看来,我有这个:
r_for_date = PR.objects.filter(recall_dt__range = (startdate, enddate)
我确实希望r_for_date
包含不存在person属性的记录(在上面的例子中,那个人ID为232的记录不应该出现)。
答案 0 :(得分:0)
这是我要做的......
valid_people_ids = Person.objects.all().values_list('id', flat=True)
bad_pr_people = PR.objects.exclude(person_id__in=valid_people_ids)
希望有所帮助。
答案 1 :(得分:0)
我建议该解决方案可以帮助您:
r_for_date = PR.objects.filter(person__id__isnull=False,recall_dt__range = (startdate, enddate))
因为person__id
属于person
表格。
但是在管理器
中定义此过滤器会更好class PRManager(models.Manager):
def get_queryset(self):
return super(PRManager, self).get_queryset().filter(person__id__isnull=False)
这样您就不会为每个过滤器添加person__id__isnull=False
。希望能帮助你。尝试此操作后请告诉我结果。