<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def save(self, *args, **kwargs):
        '''Make sure that the term is valid.
        If changed, create a QualifiedDublinCoreElementHistory object and save it.
        '''
        if not self.term in self.DCELEMENT_CODE_MAP:
            raise ValueError('Extended Dublin Core Terms such as '+self.DCTERM_CODE_MAP[self.term]+' are not allowed. Please use only Dublin Core Elements')
        #HOW TO TELL IF OBJECT CHANGED? RETRIEVE FROM DB and COMPARE
        changed = False
        if self.pk:# existing object
            db_self = QualifiedDublinCoreElement.objects.get(pk=self.pk)
            #compare values, if changed set changed!
            if self.term != db_self.term:
                raise ValueError('Can not change DC element')
            if self.content != db_self.content:
                changed = True
            if self.qualifier != db_self.qualifier:
                changed = True
            if changed:
                hist = QualifiedDublinCoreElementHistory()
                hist.qdce = self
                hist.object_id = db_self.object_id
                hist.content_type = db_self.content_type
                hist.term = db_self.term
                hist.qualifier = db_self.qualifier
                hist.content  = db_self.content
                hist.save()
        super(QualifiedDublinCoreElement, self).save(*args, **kwargs)
        obj = self.content_object
        if hasattr(obj, '_save_dc_xml_file'):
            obj._save_dc_xml_file()