.delete_instance() does not delete ManyToManyField's relationship, causing duplicate key on next create
You have a couple options.

You can specify `on_delete='cascade'`, which will automatically delete the DataTag objects when a Data or Tag gets deleted:

```python
tags = ManyToManyField(Tag, backref='data', on_delete='cascade')
```

Or, you can specify ``recursive=True`` when calling `delete_instance()`.

```python
db_data.delete_instance(recursive=True)
```
    class Tag(BaseModel):
        name = TextField()

    class Data(BaseModel):
        tags = ManyToManyField(Tag, backref='data')

    DataTag = Data.tags.get_through_model()

    db_data = Data.create()
    Tag.get_or_create(name='foo')[0].data.add(db_data)
    Tag.get_or_create(name='bar')[0].data.add(db_data)
    db_data.delete_instance()
    db_data = Data.create()
    Tag.get_or_create(name='foo')[0].data.add(db_data)

In this case, it will raise an error. Also, the newly created `db_data` persists in the database having tags `['foo', 'bar']`.