私はdjango-rest-frameworkの初心者です。私はシリアライザと良いapiのデザインを理解しようとしています。 ListView、RetrieveAPIViewなどのビューセットとジェネリックのビューに直接ダイバーしたいとは思っていません。シリアライザとAPIViewをはっきりと理解したいので、以下の基準を使って解決してください。しかし、私は問題の2つだけを下から解決することができました。ここで特定のバイヤーから連絡された家賃のリストを表示
私はここに私のREST APIスキル
"""
return a list of rent
"""
"""
return a list of rent or specific rent if token is give n
"""
"""
return a list of rent contacted by specific buyer
"""
"""
return a list of buyer that has contacted a specific 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)
rate = models.FloatField()
class Gallery(models.Model):
rent = models.ForeignKey(Rental, related_name="galleries")
image = models.FileField(upload_to=user_directory_path, null=True, blank=True)
tag = models.CharField(max_length=1, choices=TAGS, null=True, blank=True)
BUYER_CHOICES = (
('B', 'Buy'),
('R', 'Rent'),
)
class Contact(models.Model):
buyer = models.ForeignKey(User)
rental = models.ForeignKey(Rental, related_name="rent")
email_id = models.EmailField(blank=False, null=False)
buyer_choice = models.CharField(choices=BUYER_CHOICES, max_length=1, null=False, blank=False)
class GallerySerializer(serializers.ModelSerializer):
class Meta:
model = Gallery
fields = ('image', 'tag',)
class RentalSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
galleries = GallerySerializer(many=True)
class Meta:
model = Rental
fields = ('__all__')
UPDATED RentAPIViewのCODEロングコードを投稿するためのAS PER @Remi
class RentAPIView(APIView):
serializer_class = RentalSerializer
parser_classes = (FormParser, MultiPartParser,)
def get(self, request, token=None, format=None):
"""
Returns a list of rents (or just rent if token is given)
"""
reply = {}
try:
rents = Rental.objects.filter(user=request.user)
# code is updated here
buyer_id = self.request.query_params.get('buyer_id', None)
if buyer_id:
rents = rents.filter(user__contact_set__buyer_id=buyer_id)
if token:
rent = rents.get(id=token)
reply['data'] = RentalSerializer(rent).data
else:
reply['data'] = RentalSerializer(rents, many=True).data
except Rental.DoesNotExist:
return error.RequestedResourceNotFound().as_response()
except:
return error.UnknownError().as_response()
else:
return Response(reply, status.HTTP_200_OK)
申し訳ありません。私はちょうど効果的な残りのAPIを設計するために最善を尽くしたが、最後の2つの問題を解決することができなかったことを示したかった。
以下の基準をどのように処理するかについて親切にお手伝いできますか?
私は/ api/v1/rentを実行すると "不明なエラー"、 "コード":500?buyer_id = 1 – pythonBeginner
私が行ったことを示すためにコードを更新しました。 – pythonBeginner
申し訳ありませんが、そこにあなたの "関連"の名前が表示されませんでした。クエリを更新しました –