
[英]How to send bulk email in Django rest framework reading from csv?
[英]How to bulk update using CSV file in Django Rest Framework
class PackageRateListPrice(core_models.TimestampedModel):
package = models.ForeignKey(
PackageLabPrice, related_name="package_ratelist_price", on_delete=models.CASCADE
)
offer_price = models.FloatField(null=True, blank=True, default=None)
addon_price = models.FloatField(null=True, blank=True, default=None)
is_active = models.BooleanField(default=True)
我的观点:
class BulkUpdatePackageRateListPriceUpdateFromFile(APIView):
permission_classes = [IsAuthenticated, ]
def put(self, request, pk, *args, **kwargs):
upload_file = request.FILES.get('package_ratelist_file')
file = upload_file.read().decode('utf-8')
reader = csv.DictReader(io.StringIO(file))
data = [line for line in reader]
for item in data:
package_id = item['PackageID']
offer_price = item['OfferPrice']
addon_price = item['AddOnPrice']
is_active = item['IsActive']
models.PackageRateListPrice(package_id = package_id, offer_price = offer_price,addon_price = addon_price,
is_active = is_active).save()
return Response({"status": True}, status=status.HTTP_200_OK)
在这我试图从 csv 文件批量更新。 所以首先我需要检查 package_id(first_field) 是否存在,如果它存在,那么它将更新那个 id。 任何帮助将不胜感激。 谢谢 !!
您可以使用QuerySet
、 bulk_create和bulk_update方法。
对于bulk_create
你可以这样做:
reader = csv.DictReader(io.StringIO(file))
data = list(reader)
objs = [
PackageRateListPrice(
package_id = item['PackageID']
offer_price = item['OfferPrice']
addon_price = item['AddOnPrice']
is_active = item['IsActive']
)
for item in data
]
PackageRateListPrice.objects.bulk_create(objs)
对于bulk_update
有点棘手,因为您必须提供现有对象(及其各自的 pk)。 所以你可能会得到你需要更新的对象,然后改变你需要更新的值,最后运行bulk_update
方法。
来自 Django 文档的示例:
objs = [
Entry.objects.create(headline='Entry 1'),
Entry.objects.create(headline='Entry 2'),
]
objs[0].headline = 'This is entry 1'
objs[1].headline = 'This is entry 2'
Entry.objects.bulk_update(objs, ['headline'])
您可以替换在示例中为过滤器查询创建的对象:
objs = PackageRateListPrice.objects.filter(field__in=list_of_values_from_csv)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.