Use django restframework model manager

In dealing with nested relationship, if we want to maintain two or more instances of one to one relationship is created, we can write a custom manager class.

Custom manager class is primarily used in two cases:

  • 1. modify the original query set, override all () method
  • 2. A method to add additional class manager, such as inserting data into the database.

Management prepared as follows:

from django.db.models.manager import Manager


class TrackManager(Manager):

    def create_track(self, validated_data):
        from models import Track
        from models import Album
        album_data = validated_data.pop('album')
        album = Album.objects.create(**album_data)
        validated_data['album'] = album
        track = Track.objects.create(**validated_data)
        return track

    def get_queryset(self):
        return Manager.get_queryset(self).filter(is_deleted=False)
    

Note: The model must be introduced in the method, the introduction of the head to be wrong.

 

Use management classes

1, the reference introduced model.py

class Track(models.Model):
    album = models.ForeignKey(Album, related_name='tracks')
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()
    is_deleted = models.BooleanField(default=False)
    creator = models.CharField(max_length=100, null=True)

    objects = managers.TrackManager()

    class Meta:
        db_table = 'track'

2, serializer.py uses:

 def create(self, validated_data):
        track = Track.objects.create_track(validated_data)
        return track

 

Guess you like

Origin www.cnblogs.com/wangyingblock/p/11090740.html