class PersonSite(models.Model):
vps_id = models.AutoField(primary_key=True)
person = models.ForeignKey(CanonPerson, db_column='p_id',null=True)
site = models.ForeignKey(CanonSite, db_column='s_id',null=True)
person_sites = PersonSite.objects.filter(person=cp)
for person_site in person_sites:
if person_site and person_site.site_id and person_site.site.s_id:
# crashes for some records
데이터에 문제가 있습니다. PersonSite
은 더 이상 존재하지 않는 site
을 가리킬 수 있습니다. 디버거에서 내가 그러나 해당 ID가 데이터베이스에 존재하지 않는, person_site.site_id
는 5579의 값을 갖는 것을 볼 수 있습니다더 이상 존재하지 않는 ForeignKey를 확인하는 방법은 무엇입니까?
select * from tbl_vpd_sites where s_id = 5579
따라서 person_site.site_id
가 null는 아니고, 아직 단지 조건 내에서 person_site.site
에 액세스하는 응용 프로그램과 충돌 메시지 :
DoesNotExist: CanonSite matching query does not exist.
이것은 매우 어려운 상황입니다.이 경우를 무시하고 확인할 수조차 없습니다.
'person_site.site.s_id'를'CanonSite.objects.filter (pk = s_id) .count()'로 바꾸는 것은 어떨까요? – allcaps
그러면 루프의 각 반복마다 데이터베이스를 호출하게됩니다. 아마 예외를 잡는 더 좋은 방법이있을 것입니다. 이것은 내가 지금 노력하고있는 것입니다. – Houman
예. '.count()'는 오래된 것이므로'.exists()'를 사용해야합니다. – allcaps