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
Вернуться на верх