2015-12-01 5 views
0

У меня есть этот вызов Django/Python:как присоединиться к Джанго модель реакции объекта

Stuff = Source.object.value_list(dbtype, host) 

То, что я хочу сделать, это создать эту строку:

`"[email protected], [email protected]"` 

Я попытался peform объединения: ",".join(Stuff.dbtype + " " + Stuff.host), и это с треском провалилось.

Есть ли вариант вызова join, который будет выполнять то, что я ищу, без ручного повтора через мой объект?

Спасибо.

ответ

1

Вы должны использовать values вместо values_list:

stuff = Source.objects.values('dbtype', 'host') 

Тогда:

stuffs = [i['dbtype'] + '@' + i['host'] for i in stuff] 
result = ', '.join(stuffs) 

или:

def compose(stuff): 
    return stuff['dbtype'] + '@' + stuff['host'] 

temp = map(compose, stuffs) 
result = reduce(lambda x, y: x + ', ' + y, temp) 
+0

я получил ошибку там, но он получил меня, где я хотел, когда я изменил 'я [«DbType»]' в 'i.dbtype' и 'i ['host']' to 'i.host'. то это сработало. Большое спасибо. Это помогает. – arcee123

+0

Я отредактировал свой ответ с помощью другого метода без явного перебора списка. –

0

Во-первых, values_list список возврата кортежей, так что вы не можете напишите Stuff.dbtype.

Во-вторых, str.join принимает итерируемый объект в качестве параметра, такого как список.

Таким образом, вы можете переписать код так:

Stuff = Source.object.values_list(dbtype, host) 
result = ', '.join([dbtype + '@' + host for dbtype, host in Stuff]) 
Смежные вопросы