Найти - Пользователи
Полная версия: Переменная для Values(variable)
Начало » Django » Переменная для Values(variable)
1 2
info.rss
Хочу вынести в абстракцию список полей модели

AbstrView
var = None
self.model.objects.values(var)

View
var = 'id','title','text'

1. как вообще создать такую переменную
2. …global name ‘var’ is not defined


а вообще цель, вывести одну группу полей в одном месте шаблона, а другие в других, может есть другая логика?
FishHook
fields=[field.name for field in instance._meta.fields]
info.rss
def instance_dict(instance, key_format=None):
    "Returns a dictionary containing field names and values for the given instance"
    from django.db.models.fields.related import ForeignKey
    if key_format:
        assert '%s' in key_format, 'key_format must contain a %s'
    key = lambda key: key_format and key_format % key or key
    d = {}
    for field in instance._meta.fields:
        attr = field.name
        value = getattr(instance, attr)
        if value is not None and isinstance(field, ForeignKey):
            value = value._get_pk_val()
        d[key(attr)] = value
    for field in instance._meta.many_to_many:
        d[key(field.name)] = [obj._get_pk_val() for obj in getattr(instance, field.attname).all()]
    return d

тогда такая конструкция так понимаю даст более универсальный результат, но как этим пользоваться

извиняюсь, за незнание предмета, до недавнего времени занимался ширпотребом, только начал интересоваться, покажите на примерах, как это работает
info.rss
FishHook
здесь выводятся все имена полей, а как это сделать выборочно для каждой дочерней вьюхи?
FishHook
Перефразируй стартовый вопрос, нифига не понятно.
info.rss
Есть модель с полями: a, b, c, d, e, f
Вьюха DetailView
Хотелось бы в шаблоне вывести:
{% for x in one_group %}
здесь поля x.a, x.d, x.e 
{% endfor %}
{% for x in two_group %}
здесь поля x.b, x.c 
{% endfor %}
{{field.f}} # это обычная переменная
}
FishHook
То-ли я дурак?
Ну возьми и сделай, прям так как написал
{% for x in queryset %}
 {{ x.a }}, {{ x.d }}, {{ x.e }} 
{% endfor %}
{% for x in two_group %}
 {{ x.b }}, {{ x.c }} 
{% endfor %}
}
info.rss
{% for x,y in queryset %}
  <p class="label">{{x}}</p>
  <p class="value">{{y}}</p>
{% endfor %}
как здесь в queryset передать только те поля которые нужны?
вьюха DetailView, т.е только одна запись учавствует в шаблоне

к примеру можно было бы в моделе товара сделать поле Boolean, и поставить True в нужных полях
потом выводить:
{% for x,y in queryset %}
{% if Boolean == True %}
  <p class="label">{{x}}</p>
  <p class="value">{{y}}</p>
{% endif %}
{% if Boolean == False %}
  <p class="label">{{x}}</p>
  <p class="value">{{y}}</p>
{% endif %}
{% endfor %}
Но это как-то мне кажется стремно
FishHook
Ок, может кто-то найдется, кто способен понять твои чаяния, я умываю руки, ибо не понял вообще ничего. В частности: что значит “в queryset передать” и зачем делать цикл если “только одна запись”.
info.rss
слово queryset, это из вашего примера {% for x in queryset %}
вообще-то {% for x in one_group %}
цикл, чтобы не писать в шаблоне, типа:
{{item.a}}
{{item.b}}
{{item.c}}
{{item.d}}
когда можно наверное так:
{% for x,y in one_group %}
  <p class="label">{{x-это название поля}}</p><p class="value">{{y-это значение поля}}</p>
{% endfor %}
это цикл не значений, а полей с их значениями
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB