handle deleting properly - e.g. if had a refimg that was used for a match earlier then deal with it, and when deleting a person, dont leave behind orphaned refimgs

This commit is contained in:
2022-01-15 16:36:11 +11:00
parent 081b90e008
commit 5a0f4221ab

View File

@@ -134,9 +134,12 @@ def person(id):
person = Person.query.get(id)
if 'delete' in request.form:
st.SetMessage("Successfully deleted Person: ({})".format( person.tag ) )
# do the linkage tables by hand
# do linkages by hand, or one day replace with delete cascade in the DB defintions
db.session.execute( f"delete from face_refimg_link frl where refimg_id in ( select refimg_id from person_refimg_link where person_id = {id} )" )
db.session.execute( f"delete from person_refimg_link where person_id = {id}" )
db.session.execute( f"delete from refimg where id not in ( select refimg_id from person_refimg_link )" )
# now can delete the person entry with no foreign key data left
Person.query.filter(Person.id==id).delete()
db.session.commit()
return redirect( url_for( 'persons' ) )
@@ -148,6 +151,8 @@ def person(id):
if new_refs != person.refimg:
deld = list(set(person.refimg) - set(new_refs));
person.refimg = new_refs
# delete the "match" between a face found in a file and this ref img
FaceRefimgLink.query.filter(FaceRefimgLink.refimg_id==deld[0].id).delete()
Refimg.query.filter(Refimg.id==deld[0].id).delete()
st.SetMessage( f"Successfully Updated Person: removed reference image {deld[0].fname}" )
else: