classAuthor(models.Model):
name = models.CharField(max_length=255)
birth = models.DateField('birth date')
def__str__(self):
returnself.name
classPublisher(models.Model):
name = models.CharField(max_length=255)
state = models.PositiveSmallIntegerField(
'publisher state',
choices=(
(0, 'Active'),
(1, 'Disabled')
),
default=1
)
def__str__(self):
returnself.name
classBook(models.Model):
title = models.CharField(max_length=255)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
Usage
from drf_metadata.meta import MetaData, AbstractField, CustomMetadata
classBookMetadata(MetaData):
model = Book
serializers = {
'publisher': PublisherSerializer
}
update_fields = {
'authors': {
'omg': {'lol': 1}
}
}
# skip serialization (don't include model instances to choice field)
dataset_urls = {
'authors': '/author/',
'publisher': '/publisher/',
}
# custom queryset for instance (self has `obj` if you need to filter qs)defget_authors_queryset(self, field):
return Author.objects.filter(name='author0')
# use custom serializer for field instance(s)defget_authors_serializer(self, field):
# self.request, self.view, self.obj are available in MetaData instancereturn AuthorSerializer
# update field bundle with runtime valuesdefupdate_authors_field_meta(field, obj):
return {'new': 1, 'obj': str(obj)}
# use own serializerdefget_publisher_field_meta(field, obj):
return {'new': 1, 'obj': str(obj)}
The Tidelift Subscription provides access to a continuously curated stream of human-researched and maintainer-verified data on open source packages and their licenses, releases, vulnerabilities, and development practices.