Ich muss meinen Account
Betrag automatisch aktualisieren, wenn ein Transaction
erstellt wird.Wie wird ein verwandtes Modell aktualisiert, nachdem ein anderes Modell erstellt wurde?
Ich habe Transaction
Modell model.py
:
class Transaction(models.Model):
user = models.ForeignKey(User, default=None)
account = models.ForeignKey(Account, default=None)
...
Seine serializers.py
:
class TransactionSerializer(serializers.ModelSerializer):
class Meta:
model = Transaction
fields = ('id', 'user', 'account_id', 'category_id', 'name', 'amount', 'description', 'created_at')
def create(self, validated_data):
return Transaction.objects.create(**validated_data)
Und seine 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_id = request.data['account_id']
category_id = request.data['category_id']
serializer = TransactionSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user, account_id=account_id, category_id=category_id)
self.update_account(request)
return Response(serializer.data, status=HTTP_201_CREATED)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
def update_account(self, request):
account_id = request.data['account_id']
category_id = request.data['category_id']
account = Account.objects.get(pk=account_id)
category = Category.objects.get(pk=category_id)
if category.type == 'expense':
account.amount = (account.amount - int(self.request['amount']))
else:
account.amount = (account.amount + int(self.request['amount']))
# Then what?
Ich dachte an eine benutzerdefinierte Methode erstellen, die innerhalb ausgeführt wird die Bedingung, wenn serializer
ist gültig, das würde das Konto und die Kategorie nach ihrer ID erhalten. Ich könnte, so weit, die aktuellen Werte anzeigen, die sie haben, wie amount
und name
, aber danach weiß ich nicht, was zu tun ist. Ich stelle mir vor, ich brauche meine AccountSerializer
, aber ich bin mir nicht sicher.
Haben Sie versucht, account.save()? –