I have three models, "
Item" , "
Seller" and "
User" .
User is like admin he can create
Seller and each
Seller will have a unique id suppose "
uid".
And The
Sellers created by
User can create Item , So I want to make API in which if a
Seller creates/posts a new Item , I want a reverse relationship between (
User and Seller) and (
Seller and Item). i.e Every
Seller created by
User should have a field that have all
Seller he created. And every
seller should have a filed telling the name of
User who created it. Simillary between
Seller and
Item .Every
Seller will have list of
Items he created and every
Item will have a filed
Seller who created it.
Now I have implemented User and Seller Reverse Relationship but I am not able to create Seller and Item reverse relation. I followed these link
Tutorial 4: Authentication & Permissions and
Serializer relations.
Here is my code snippet :
Model.py class Seller(models.Model):
UID=models.CharField(max_length=50,unique=True)
name=models.CharField(max_length=100)
....
super_owner = models.ForeignKey('auth.User', related_name='seller_added')
def __unicode__(self):
return '%s' (self.UID)
class Item(models.Model):
name=models.CharField(max_length=250)
....
seller_uid= models.ForeignKey(Seller,related_name='items_added', on_delete=models.CASCADE)
def __unicode__(self):
return '%s: %d' % (self.name, self.mrp)
Serializer.pyclass UserSerializer(serializers.ModelSerializer):
seller_added = serializers.PrimaryKeyRelatedField(many=True, queryset=Seller.objects.all())
class Meta:
model = User
fields = ('id', 'username','seller_added')
class SellerSerializer(serializers.ModelSerializer):
items_added = serializers.StringRelatedField(many=True)
super_owner = serializers.ReadOnlyField(source='super_owner.username')
class Meta:
model = Seller
fields = ('UID','name','items_added','super_owner')
class ItemSerializer(serializers.ModelSerializer):
seller_uid= serializers.ReadOnlyField(source='seller_uid.UID')
class Meta:
model = Item
fields = ('id', 'name', 'seller_uid')
Views.pyclass UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
This viewset automatically provides `list` and `detail` actions.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly_seller,)
def perform_create(self, serializer):
serializer.save(seller_uid=self.request.user.seller_uid)
class SellerViewSet(viewsets.ModelViewSet):
queryset = Seller.objects.all()
serializer_class = SellerSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
def perform_create(self, serializer):
serializer.save(super_owner=self.request.user)
I dont know what should I write in
perform_create of
ItemViewSet so that every Item will have a Seller id i.e seller_uid .
For
SellerViewSet I copied
super_owner=self.request.user from DRF tutorial and it worked.
Any help will be appreciated.