【发布时间】:2020-08-06 19:30:08
【问题描述】:
我有两个模型 Purchaser 和 paymentInvoice,我想确保在为相同的 Purchaser 个人/实例创建新的 paymentInvoice 时不会创建重复的 Purchaser 对象.
基本上我有一个名为 Becky 的 Purchaser,所以当我想为 Becky 创建发票时,我首先要确定名称是否为 >Becky 存在于 Purchaser 中,如果存在,则创建 paymentInvoice 对象,Becky 采用字段 invoiceOwner。如果 Becky 在 Purchaser 中不存在,请在 Purchaser 中创建该购买者的实例,然后使用该实例名称创建 paymentInvoice 对象。
模型文件
class Purchaser(models.Model):
name = models.CharField(max_length=50)
phone = models.CharField(max_length=20)
email = models.EmailField(max_length=255, blank=True, null=True)
image = models.ImageField(default='default.png', upload_to='customer_photos/%Y/%m/%d/')
data_added = models.DateField(default=datetime.date.today)
def __str__(self):
return self.name
class paymentInvoice(models.Model):
invoiceNo = models.CharField(max_length=50, unique=True, default=increment_invoice_number)
invoiceOwner = models.ForeignKey(Purchaser, on_delete=models.CASCADE, related_name="invoice_detail")
product = models.CharField(max_length=50, blank=True)
date = models.DateField(default=datetime.date.today)
quantity = models.PositiveSmallIntegerField(blank=True, default=1)
payment_made = models.IntegerField(default=0)
def __str__(self):
return self.invoiceOwner.name
序列化器文件
class paymentInvoiceSerializer(serializers.ModelSerializer):
invoiceOwner = purchaserSerializer(many=False)
invoiceOwner = serializers.CharField(source='invoiceOwner.name')
class Meta:
model = paymentInvoice
fields = '__all__'
def create(self, validated_data):
purchaser_data = validated_data.pop("invoiceOwner")
purchaser, _ = Purchaser.objects.get_or_create(**purchaser_data).first()
validated_data.update({"invoiceOwner": purchaser})
return paymentInvoice.objects.create(**validated_data)
查看次数文件
class PurchaserListCreateView(ListCreateAPIView):
serializer_class = purchaserSerializer
queryset = Purchaser.objects.all()
class paymentInvoiceListCreateView(ListCreateAPIView):
serializer_class = paymentInvoiceSerializer
queryset = paymentInvoice.objects.all().order_by('-date')
POST 在 Postman 中请求模型 paymentInvoice
{
"invoiceOwner":"Becky",
"product": "Lix",
"quantity": 1,
"payment_made": 3000
}
我的方法不起作用,我从 PostMan 收到错误
MultipleObjectsReturned 在 /api/clients/invoice/ get() 返回了多个 Purchaser -- 它返回了 2 个!
【问题讨论】:
标签: django api django-models django-rest-framework django-serializer