如何在django-rest框架中从一个视图集操作将数据插入到两个模型中



我有两个模型Purchase和Transaction。每当数据插入采购模型时,我都需要将数据插入交易模型。采购必须有相应的交易记录。

采购模式为-

class Purchase(models.Model):
date = models.DateField(blank=True)
product = models.ForeignKey(
Product, on_delete=models.CASCADE, null=True, blank=True
)
quantity = models.FloatField()
amount = models.FloatField()
from_head = models.ForeignKey(Head, on_delete=models.CASCADE, null=True, blank=True)
from_subhead = models.ForeignKey(SubHead,on_delete=models.CASCADE,null=True,blank=True,)
to_head = models.ForeignKey(Head, related_name="purchase_to_head", on_delete=models.CASCADE, 
null=True, blank=True,)
to_subhead = 
models.ForeignKey(SubHead,related_name="purchase_to_subhead",on_delete=models.CASCADE,null=True,blank=True,)

交易模型为-

class Transaction(models.Model):
class TypeList(models.TextChoices):
IN = "IN"
OUT = "OUT"
class PaymentType(models.TextChoices):
CASH = "CASH"
DUE = "DUE"
date = models.DateField(blank=True)
purchase = models.ForeignKey(
Purchase, on_delete=models.CASCADE, null=True, blank=True
)
sale = models.ForeignKey(Sale, on_delete=models.CASCADE, null=True, blank=True)
product = models.ForeignKey(
Product, on_delete=models.CASCADE, null=True, blank=True
)
type = models.CharField(max_length=10, choices=TypeList.choices)
payment_type = models.CharField(max_length=10, choices=PaymentType.choices)
amount = models.FloatField()
from_head = models.ForeignKey(Head, on_delete=models.CASCADE, null=True, blank=True)
from_subhead = models.ForeignKey(SubHead, on_delete=models.CASCADE, null=True, blank=True,)
to_head = models.ForeignKey(Head, related_name="trans_to_head", on_delete=models.CASCADE, null=True, blank=True,)
to_subhead = models.ForeignKey(SubHead, related_name="trans_to_subhead", on_delete=models.CASCADE, null=True,blank=True,)

采购和交易序列化程序是-

class PurchaseSerializer(serializers.ModelSerializer):
class Meta:
model = Purchase
fields = "__all__"

class TransactionSerializer(serializers.ModelSerializer):
class Meta:
model = Transaction
fields = "__all__"

采购和交易视图集是-

class PurchaseView(viewsets.ModelViewSet):
serializer_class = PurchaseSerializer
queryset = Purchase.objects.all()

class TransactionView(viewsets.ModelViewSet):
serializer_class = TransactionSerializer
queryset = Transaction.objects.all()

如何从一个视图集操作将数据惰性化为两个模型。请帮帮我。

您可以覆盖视图集中的perform_create方法。

from django.db import transaction 
class PurchaseView(viewsets.ModelViewSet):
serializer_class = PurchaseSerializer
queryset = Purchase.objects.all()
def perform_create(self, serializer):
with transaction.atomic():
purchase = serializer.save()
# create transaction model now.
Transaction.objects.create(purchase=purchase, type='IN',....)

最新更新