Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 24, 2011 22:01:09

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Итерация и модели

Есть таблица бд на 24 поля. Сделана выборка:

def detail(request, the_model): 
the_model = urllib.unquote(the_model)
gadget = PhoneModel.objects.get(model_name = the_model)
features = Feature.objects.get(model_name = gadget.id)
В итоге получаю один объект с 24 полями. Возможно ли итерировать поля? Или не обойтись без непосредственного вызова всех полей в шаблоне?
{{ features.network }}
e.t.c
Таблица
class Feature(models.Model):  
model_name = models.ForeignKey(PhoneModel)
control = models.CharField(max_length = 150, blank = True)
network = models.CharField(max_length = 150, blank = True)
navigation = models.CharField(max_length = 150, blank = True)
sim = models.IntegerField(max_length = 1, blank = True)
screen = models.CharField(max_length = 150, blank = True)
camera = models.CharField(max_length = 150, blank = True)
audio = models.CharField(max_length = 150, blank = True)
video = models.CharField(max_length = 150, blank = True)
images = models.CharField(max_length = 150, blank = True)
e_book = models.CharField(max_length = 150, blank = True)
memory = models.CharField(max_length = 150, blank = True)
messsages = models.CharField(max_length = 150, blank = True)
data_transfer = models.CharField(max_length = 150, blank = True)
applications = models.CharField(max_length = 150, blank = True)
phone_book = models.CharField(max_length = 150, blank = True)
organizer = models.CharField(max_length = 150, blank = True)
ringtone = models.CharField(max_length = 150, blank = True)
operation = models.CharField(max_length = 150, blank = True)
the_set = models.CharField(max_length = 300, blank = True)
color = models.CharField(max_length = 150, blank = True)
size = models.CharField(max_length = 40, blank = True)
language = models.CharField(max_length = 350, blank = True)
extra = models.CharField(max_length = 350, blank = True)



Офлайн

#2 Апрель 25, 2011 08:58:43

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Итерация и модели

я делал генератор для этого:

    #в модели
@property
def listable_properties(self):

props_names = ['foundation', 'wall', 'blocking', 'ceiling',
'roof', 'tiling', 'decoration', 'socle']
for pname in props_names:
field = self._meta._name_map.get(pname, None)
if field and getattr(self, pname):
yield {'name': field[0].verbose_name, 'value': getattr(self, pname)}



{# в шаблоне #}
{% for prop in project.listable_properties %}
<dt>{{ prop.name }}:</dt>
<dd>{{ prop.value }}</dd>
{% endfor %}



Офлайн

#3 Апрель 25, 2011 11:42:09

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Итерация и модели

appetito, спасибо. Функция оказалась мне довольно сложной. Попробую разобраться.
Функция написана в классе модели?
Я не нашел инфы о _meta, _name_map. Понял, что это “какие-то” атрибуты классов моделей. Что они возвращают, чем являются?
Почему field.verbose_name ?
И самое главное, не понятно, как применить эту функцию к выборке?



Отредактировано (Апрель 25, 2011 12:19:39)

Офлайн

#4 Апрель 26, 2011 22:33:03

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Итерация и модели

Поищите книжку Pro Django. Автор Marty Alchin. Там есть что вам нужно



Офлайн

#5 Апрель 26, 2011 23:27:11

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Итерация и модели

svas, спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version