2016-05-02 12 views
0

私は2つのモデルのレンタルとギャラリーを持っています。私のモデルはSerializers.py(少ないフィールドで短縮)このRentListAPIView内に画像フィールドを表示するにはどうすればいいですか?

Models.py

class Rental(models.Model): 
    ownerName = models.CharField(_("Owner's Name"),max_length=255, blank=True,null=True, 
     help_text=_("Owner's Full Name")) 
    renter = models.ForeignKey(User,null=True,blank=True) 
    email = models.CharField(max_length=120,blank=True,null=True) 
    phoneNumber = models.PositiveIntegerField(blank=False,null=True, 
     help_text=_("Phone number of contact person")) 
    listingName = models.CharField(_("Lisitng Name"), max_length=255, blank=False,null=True, 
     help_text=_("Title of the rental space")) 


class Gallery(models.Model): 
    rental = models.ForeignKey('Rental', null=True, on_delete=models.CASCADE,verbose_name=_('Rental'), related_name="gallery") 
    image = models.ImageField(blank=True,upload_to='upload/',null=True) 

ように見える

class RentalListSerializer(ModelSerializer): 
    renter = SerializerMethodField() 
    # gallery = GalleryListSerializer() 
    class Meta: 
     model = Rental 

    def get_renter(self, obj): 
     return str(obj.renter.username) 

class GalleryListSerializer(ModelSerializer): 
    class Meta: 
     model = Gallery 

Views.py

class RentalListAPIView(ListAPIView): 
    # queryset = Rental.objects.all() 
    serializer_class = RentalListSerializer 
    filter_backends = [SearchFilter] 
    search_fields = ['place','city'] 
    pagination_class = RentalPageNumberPagination 

    def get_queryset(self, *args, **kwargs): 
     # queryset_list = super(RentalListAPIView,self).get_queryset(*args, **kwargs) 
     queryset_list = Rental.objects.all() 
     query = self.request.GET.get('q') # this is a class based view so we need to use self 
     if query: 
      queryset_list = queryset_list.filter(
       Q(place__icontains=query)| 
       Q(city__icontains=query) 
       ).distinct() 
     return queryset_list 


    class GalleryListAPIView(ListAPIView): 
     # queryset = Rental.objects.all() 
     serializer_class = GalleryListSerializer 
     pagination_class = RentalPageNumberPagination 

     def get_queryset(self, *args, **kwargs): 
      queryset_list = Gallery.objects.all() 
      return queryset_list 

MY APIの設計は、この

enter image description here

のように見えますが、私はあまりにもイメージフィールドを必要とし、それぞれの家賃はこの

enter image description here

+0

だけです'gallery = GalleryListSerializer()'が追加されていません。 – AKS

+0

私はそれを試みた。 GalleryListSerializerは定義されていません。 GalleryListSerializerクラスをRentListSerializerの一番上から一番上に移動すると、/ api/rentals/ でAttributeErrorのエラーが発生します。 'RelatedManager'オブジェクトには 'rental'という属性はありません – pri

+0

私の答えを見てください。それを下から上に移動する必要があります。 – AKS

答えて

1

のような複数の画像は、Djangoの残りの枠組みの中でNested Relationshipsを見てくださいました。フィールドがto-manyの関係を表すために使用されている場合は

は、あなたがシリアライザフィールドに many=Trueフラグを追加する必要があります。

何あなたが今持っていることは、私が働いていないと思われ、これで、あなたはそれが。:

# gallery = GalleryListSerializer() 

をコメントしている理由は、あなたが必要なものですが、次のされています

gallery = GalleryListSerializer(many=True, read_only=True) 
+0

私は下から上に移動する必要はありませんか? – pri

+0

はい、そうする必要があります。 – AKS

+1

私はそれを試してみましょう – pri

関連する問題