【发布时间】:2020-08-05 01:28:47
【问题描述】:
在我的 django 应用程序中,每当我想添加一个使用表 paymentInvoice 的新对象时,我都会遇到困难。
我从我的 api 得到的错误看起来像这样
/api/clients/invoice/ 处的 IntegrityError “invoiceOwner_id”列中的空值违反非空约束 详细信息:失败行包含 (10, INV-0006, Lix, 2020-08-04, 1, Pending, 3000, null)。
注意:我还没有创建字段invoiceOwner_id,postgres 自动添加了它,或者更确切地说是使用它作为我的invoiceOwner 字段的表示
class Purchaser(models.Model):
name = models.CharField(max_length=50)
phone = models.CharField(max_length=20, unique=True)
email = models.EmailField(max_length=255, unique=True, blank=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 = serializers.SerializerMethodField()
class Meta:
model = paymentInvoice
fields = '__all__'
def get_invoiceOwner(self, instance):
return instance.invoiceOwner.name
视图文件
class paymentInvoiceListCreateView(ListCreateAPIView):
serializer_class = paymentInvoiceSerializer
queryset = paymentInvoice.objects.all().order_by('-date')
GET api 调用的结果。
{
"id": 1,
"invoiceOwner": "Martin",
"invoiceNo": "INV-0001",
"product": "",
"date": "2020-08-04",
"quantity": 1,
"payment_made": 0
}
尝试以POST 的身份在下方传递,但出现主要错误
{
"invoiceOwner": "Becky",
"product": "Lix",
"quantity": 1,
"payment_made": 3000
}
【问题讨论】:
-
您需要在序列化程序中显式覆盖
create方法,因为您的模型作为外键invoiceOwner,只是为了首先将该实例创建为Purchaser实例 -
我试过但卡住了。我将如何去做。使用提供的代码
标签: django api django-models django-rest-framework django-serializer