def test_property_diff(self): """ The "fields" included in a diff don't have to be fields at all and can be properties, for example, as long as a custom ModelDiff is registered which dictates what FieldDiff to use for the "field". """ diff.register(FakeFieldModel, FakeFieldModelDiff) a = FakeFieldModel(a='abc') b = FakeFieldModel(a='def') d = diff.diff(a, b) self.assertTrue(isinstance(d['b'], (TextFieldDiff,)))
def test_property_diff(self): """ The "fields" included in a diff don't have to be fields at all and can be properties, for example, as long as a custom ModelDiff is registered which dictates what FieldDiff to use for the "field". """ diff.register(FakeFieldModel, FakeFieldModelDiff) a = FakeFieldModel(a='abc') b = FakeFieldModel(a='def') d = diff.diff(a, b) self.assertTrue(isinstance(d['b'], (TextFieldDiff, )))
obj_lookup = _get_slug_lookup(unique_together, obj, new_p) if obj.__class__.objects.filter(**obj_lookup): continue obj.slug = new_p.slug obj.pk = None # Reset the primary key before saving. obj.save(comment="Parent page renamed") class PageDiff(diff.BaseModelDiff): fields = ( 'name', ('content', diff.diffutils.HtmlFieldDiff), ) diff.register(Page, PageDiff) versioning.register(Page) class PageFile(models.Model): file = models.FileField(upload_to='pages/files/', storage=RandomFilenameFileSystemStorage()) name = models.CharField(max_length=255) slug = models.SlugField(max_length=255, editable=False) _rough_type_map = [(r'^audio', 'audio'), (r'^video', 'video'), (r'^application/pdf', 'pdf'), (r'^application/msword', 'word'), (r'^text/html', 'html'), (r'^text', 'text'), (r'^image', 'image'), (r'^application/vnd.ms-powerpoint', 'powerpoint'),
if not slugify(self.name): raise ValidationError("Page name is invalid.") def pretty_slug(self): if not self.name: return self.slug return name_to_url(self.name) pretty_slug = property(pretty_slug) class PageDiff(diff.BaseModelDiff): fields = ("name", ("content", diff.diffutils.HtmlFieldDiff)) diff.register(Page, PageDiff) class PageFile(models.Model): file = models.FileField(upload_to="pages/files/", storage=RandomFilenameFileSystemStorage()) name = models.CharField(max_length=255) slug = models.SlugField(max_length=255, editable=False) history = TrackChanges() _rough_type_map = [ (r"^audio", "audio"), (r"^video", "video"), (r"^application/pdf", "pdf"), (r"^application/msword", "word"), (r"^text/html", "html"), (r"^text", "text"),
return ', '.join(map(unicode, self.tags.all())) class Meta: ordering = ('page__slug',) class TagsFieldDiff(diff.BaseFieldDiff): template = 'tags/tags_diff.html' def get_diff(self): set1 = set(self.field1 and self.field1.all() or []) set2 = set(self.field2 and self.field2.all() or []) deleted = set1.difference(set2) added = set2.difference(set1) equal = set1.intersection(set2) return {'equal': equal, 'deleted': deleted, 'added': added} class PageTagSetDiff(diff.BaseModelDiff): fields = (('tags', TagsFieldDiff), ) diff.register(PageTagSet, PageTagSetDiff) versioning.register(PageTagSet) # For registration calls import signals import feeds