Django Rest Frameworkで逆の関係を表示できませんでした。ここでは私の場合、家賃は複数の画像を持つことができ、私はその家賃(居間画像、キッチン画像、バスルーム画像など)のすべての画像を/ api/v1/rentに表示したいと思っています。親クラスに外部キーを表示
レンタルリソースに表示するこれらのギャラリーを取得するにはどうすればよいですか?
class Rental(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=300, blank=False, null=False)
phone_number = models.PositiveIntegerField(null=False, blank=False)
renter = models.CharField(choices=RENTER_CHOICES, max_length=1, default=RENTER_CHOICES[0])
def __str__(self):
return self.name
def user_directory_path(instance, filename):
return 'rent_{0}/{1}'.format(instance.rent.id, filename)
class Gallery(models.Model):
rent = models.ForeignKey(Rental, related_name="rent")
image = models.FileField(upload_to=user_directory_path)
tag = models.CharField(max_length=1, choices=TAGS, null=True, blank=True)
class GallerySerializer(serializers.ModelSerializer):
rent = serializers.ReadOnlyField()
class Meta:
model = Gallery
fields = ('rent', 'image', 'tag',)
class RentalSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
# gallery = serializers.SerializerMethodField('get_children')
#
# def get_children(self, obj):
# print ('obj', obj.gallery_set)
# serializer = GallerySerializer(obj.gallery_set.all(), many=True)
# return serializer.data
gallery = GallerySerializer(source='gallery_set',many=True, read_only=True)
class Meta:
model = Rental
fields = ('user', 'name', 'phone_number','gallery',)
は今、私は両方の方法で、1つのコメント方法と別のソース=「gallery_set」の方法を使用して、ギャラリーのリストを取得いけません。私はrent = GallerySerializer(many=True)
をすれば
UPDATE
私はギャラリーの一覧を取得するが、それはどんな意味を成していますか?
[
{
"user": "admin",
"name": "Sunrise Home",
"phone_number": 9842333833,
"rent": [
{
"image": "http://localhost:8000/media/rent_1/sittingRoom.jpg",
"tag": "L"
}
]
}
]
上記のapiではギャラリーが表示されていますが、レンタルリソース内の賃貸物件のリストとして表示されています。誰も私がより良い方法でAPIを設計するのを助けることができますか?あなたが指定したrelated_name
が自動的Rental
オブジェクトのフィールドを定義して、あなたのGallery
モデルでRental
のための外部キー関係を指定
私はrelated_nameの概念を理解するのに困難を抱えていました。 related_nameにはどのような名前を付ける必要がありますか?説明をありがとう。私はすでにそれをしましたが、あなたは私を非常に明確にしました。貴重な情報を共有してくれてありがとうございました。 – pythonBeginner
@pythonLover私は自分の答えを更新して、 'related_name'をどのように指定するかの別の例を挙げました。回答があなたの問題を解決した場合、あなたはそれを受け入れて、あなたの質問が答えられたことを他人に知らせることができます。それが役に立てば幸い! – natbob1
今私はrelated_nameにはっきりとしていますが、上記のような家賃のギャラリーのリストを表示するのではなく、ギャラリーで家賃のリストを表示したいのですが?家賃のギャラリーのリストとギャラリーの家賃のリストを表示することの違いを示す理論だけです。 – pythonBeginner