Django - цикл for в одной строке
Я экспортирую все данные о товаре из базы данных в XML файл. Одним из полей, которые необходимо экспортировать, являются изображения. Есть два поля, в которые нужно экспортировать изображения. Если есть одно изображение (таблица продуктов), оно должно быть экспортировано в item_image_link
. Если их несколько (таблица ProductImage) - в item_additional_image_link
.
products = Product.objects.filter(product_status=True).prefetch_related('images')
for product in products:
item = ET.SubElement(channel, "item")
g_item_id = ET.SubElement(item, ("{http://base.google.com/ns/1.0}id")).text = product.sku
g_item_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}image_link")).text = 'http://127.0.0.1:8000'+products.image.url
for image in product.images.all():
g_item_additional_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}additional_image_link")).text = 'http://127.0.0.1:8000'+image.image.url
Я успешно экспортирую изображения для каждого продукта в соответствующее поле item_additional_image_link
однако они отображаются в трех разных строках в соответствии с количеством изображений в базе данных
<item>
<g:id>55555</g:id>
<g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/K003-min.jpeg</g:additional_image_link>
<g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/K009-min.jpeg</g:additional_image_link>
<g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/image00024-min.jpeg</g:additional_image_link>
</item>
Как я могу сделать три строки выше в одной, разделенные запятыми между каждым изображением? Что-то вроде:
<item>
<g:id>55555</g:id>
<g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/K003-min.jpeg, http://127.0.0.1:8000/media/photos/2021/12/20/image00024-min.jpeg, http://127.0.0.1:8000/media/photos/2021/12/20/K009-min.jpeg</g:additional_image_link>
</item>
Спасибо
Вам нужно использовать метод string .join
на нескольких текстовых полях, чтобы объединить их в одно, а затем сгенерировать один элемент XML. Я догадываюсь о ET...
g_item_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}image_link")
).text = 'http://127.0.0.1:8000'+products.image.url
texts = []
for image in product.images.all():
texts.append( 'http://127.0.0.1:8000'+image.image.url )
if texts: # don't generate an empty element
g_item_additional_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}additional_image_link")
).text = ', '.join( texts)
Постройте значения перед созданием ET.SubElement(...)
additional_image_links = ",".join([f"http://127.0.0.1:8000{x.image.url}" for x in product.images.all()])
if additional_image_links:
g_item_additional_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}additional_image_link")).text = additional_image_links