私はTransaction
がAccount
とそれに関連するCategory
を持つ小さなシステムを書いています。現在、私はTransactionSerializer
にPrimaryKeyRelatedField
を使用しています。私は、GET
すべてのトランザクションを送信するか、または1つだけ、関連するAccount
とCategory
の詳細をJSON応答に戻す必要があります。 TransactionSerializer
に次モデルから取得する方法、関連するモデルの詳細をJSONレスポンスに表示する方法はありますか?
class TransactionSerializer(serializers.ModelSerializer):
account = serializers.PrimaryKeyRelatedField(read_only=True)
category = serializers.PrimaryKeyRelatedField(read_only=True)
# output:
[
transaction: {
id: 1,
account: 1
category: 3,
...
},
...
]
は細部に関連するアカウントとカテゴリをもたらすために、私がやった:
class TransactionSerializer(serializers.ModelSerializer):
account = AccountSerializer()
category = CategorySerializer()
# output:
[
transaction: {
id: 1,
account: { id: 1, name: "Foo", ... }
category: { id: 3, name: "Bar", ... },
...
},
...
]
しかし、私は作成することはできませんPrimaryKeyRelatedField
使用することにより、応答が、これは似ています新しい取引。 account
とcategory
というエラーが表示されます。シリアライザ内でフィールドをread_only
に移動しようとしましたが、別のエラーではこれらのフィールドはfields
リスト内にあるはずです。取引の
全views.py
:
class TransactionList(APIView):
def get(self, request):
user_id = request.user.pk
transactions = Transaction.objects.filter(user_id=user_id).order_by('-created_at')
serializer = TransactionSerializer(transactions, many=True)
return Response(serializer.data)
def post(self, request):
account = Account.objects.get(pk=request.data['account'])
category = Category.objects.get(pk=request.data['category'])
serializer = TransactionSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user, account=account, category=category)
return Response(serializer.data, status=HTTP_201_CREATED)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
class TransactionDetail(APIView):
def get(self, request, pk):
try:
transaction = Transaction.objects.get(pk=pk)
serializer = TransactionSerializer(transaction)
return Response(serializer.data)
except:
raise Http404
urls.py
:
urlpatterns = [
url(r'^$', views.TransactionList.as_view(), name="transaction_list"),
url(r'^(?P<pk>[0-9]+)/$', views.TransactionDetail.as_view(), name="transaction"),
]
models.py
:
class Transaction(models.Model):
user = models.ForeignKey(User, default=None)
account = models.ForeignKey(Account, default=None)
category = models.ForeignKey(Category, default=None)
name = models.CharField(max_length=32)
amount = models.DecimalField(max_digits=10, decimal_places=2, default="0.0")
description = models.CharField(max_length=256, default=None, null=True)
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(default=timezone.now)
は、これが私の問題です。新しいトランザクションを作成するにはどうすればいいですか?IDでアカウントとカテゴリを割り当てますが、すべてを取得する場合はすべての詳細を持ってきますか?
ビューとURLを表示します。 –
ビューとURLファイルコードで質問が更新されました。 – mfgabriel92
モデルを提供できますか? – marin