Reputation: 10631
i find it hard to find a solution for my problem, i'm trying to do something like this:
/127.0.0.1:8080/companies/1/cars/1
in my CompanyViewSet i can get inside the function named car and the car instance is just right.. but im no able to put it inside the serializer and to show the information
i have the following code:
model:
class Car(models.Model):
name = models.CharField(max_length=255)
price = models.IntegerField(default=0)
created = models.DateTimeField(auto_now=True)
companies = models.ManyToManyField('Company', related_name='CarBelongToCompny', through='CarBelongToCompny')
objects = PassThroughManager.for_queryset_class(CarQueries)()
def __unicode__(self):
return self.name
def save(self,*args,**kwargs):
super(Car, self).save(*args, **kwargs)
return self
class Company(models.Model):
cities = (
('rishon leziyyon', 'rishon leziyyon'),
('tel aviv', 'tel aviv'),
('beer sheva', 'beer sheva'),
('eilat', 'eilat'),
('kefar saba', 'kefar saba'),
)
name = models.CharField(max_length=255)
city = models.CharField(max_length=255,
choices=cities,)
phone_number = models.IntegerField(default=0)
is_active = models.BooleanField(default=True)
cars = models.ManyToManyField('Car', related_name='CarBelongToCompny', through='CarBelongToCompny')
objects = PassThroughManager.for_queryset_class(ComapniesQuerySet)()
def __unicode__(self):
return self.name
def save(self,*args,**kwargs):
super(Company, self).save(*args, **kwargs)
return self
class CarBelongToCompny(models.Model):
price_at_company = models.IntegerField(default=0)
company = models.ForeignKey(Company, related_name='companyName')
car = models.ForeignKey(Car, related_name='carName')
objects = PassThroughManager.for_queryset_class(CarBelongCompanyQueries)()
def __unicode__(self):
return self.car.name + " " + self.company.name + " " + str(self.price_at_company)
serializer:
class CompanySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Company
class PriceListSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.CarBelongToCompny
class CarSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Car
views:
class CarViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
queryset = Car.objects.all()
serializer_class = CarSerializer
class CompanyViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = CompanySerializer
@link()
def cars(self, request, pk):
cars = CarBelongToCompny.objects.filter(company__id=pk)
serializer = PriceListSerializer(cars)
return Response(serializer.data)
class PriceListViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
queryset = CarBelongToCompny.objects.all()
model = models.CarBelongToCompny
when im in the companies/1 i want to be able to add the cars and to see all the requested cars that in that company, is it possible?
Upvotes: 1
Views: 270
Reputation: 2553
class CompanyViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = CompanySerializer
@action(methods=['GET', 'POST'])
def cars(self, request, pk):
if request.method== "GET":
cars = CarBelongToCompny.objects.filter(company__id=pk)
serializer = PriceListSerializer(cars)
return Response(serializer.data)
if request.method== "POST":
################
# create logic
Upvotes: 1