Вот пример без jQuery. Я не совсем уверен, к какому объекту данных вы обращаетесь, но после того, как у вас есть каждый элемент в цикле, нужно извлечь то, что вам нужно.
var xclassget=document.getElementsByClassName('black-p stacard caading');
var attributes = []
Object.keys(xclassget).forEach(function(el) {
var element = xclassget[el]
attributes.push({
'coin-value': element.attributes['coin-type'].value,
'coin-name': element.attributes['coin-name'].value,
'coin-rank': element.attributes['coin-rank'].value,
})
})
console.log(attributes)
Django реализует образцовое наследование с OneToOneField между таблицей родительской модели и таблицей дочерней модели. Когда Вы делаете Base.object.all()
, Django запрашивает просто Базовую таблицу, и также - никакой способ знать, какова дочерняя таблица. Поэтому, к сожалению, не возможно перейти непосредственно к дочернему образцовому экземпляру без дополнительных запросов.
Этот отрывок показывает общепринятую методику добавления поля ContentType к базовой модели:
from django.contrib.contenttypes.models import ContentType
class Base(models.Model):
content_type = models.ForeignKey(ContentType,editable=False,null=True)
def save(self):
if(not self.content_type):
self.content_type = ContentType.objects.get_for_model(self.__class__)
self.save_base()
def as_leaf_class(self):
content_type = self.content_type
model = content_type.model_class()
if(model == Base):
return self
return model.objects.get(id=self.id)
Можно затем сказать if Base.content_type.model_class()
определить тип.
Вот другой отрывок, который добавляет пользовательского менеджера в соединение.
Как Вы видите, оба из этих решений имеют потенциал, чтобы быть чрезвычайно дорогими. Если у Вас будет большое количество экземпляров, с помощью as_leaf_class (), то метод потребует одного запроса на каждом объекте.
Вместо этого если Вы имеете известный набор дочерних моделей, просто запрашиваете каждую модель отдельно и агрегировали экземпляры в один список.
Это чувствует себя хрупким, потому что это. (Это - перепечатка ответа в другом контексте. Посмотрите, что C++ бросает программно: это может быть сделано?)
Читайте на полиморфизме. Почти каждый "динамический бросок" ситуация является примером полиморфизма, изо всех сил пытающегося быть реализованным.
Независимо от того, что решение, которое Вы делаете в динамическом броске, было уже принято. Просто делегируйте реальную работу к подклассам.
Вы не учли самую важную часть своего примера. Полезная, полиморфная работа.
Когда Вы сказали, что "Я хочу определить, имеет ли объект тип Child_1 или Child_2...", Вы не учли, "таким образом, я могу заставить объект сделать aMethod()
способом это уникально для каждого подкласса". Тот метод является полезной работой, и это должен просто быть метод обоих подклассов.
class Base(models.model):
def aMethod(self):
# base class implementation.
class Child_1(Base):
def aMethod(self):
# Child_1 override of base class behavior.
class Child_2(Base):
def aMethod(self):
supert( Child_2, self ).aMethod() # Invoke the base class version
# Child_2 extension to base class behavior.
Тот же метод, несколько реализаций. Никогда потребность к "динамической идентификации типов" или определению реального класса.
Ну ... Моя проблема была. В представлении у меня была эта основная модель, скажем «Big_Model», и были некоторые «Small_Model», связанные с «Big_Model». Поэтому, когда я хотел получить всю «Small_Model», относящуюся к определенному экземпляру «Big_Model», я сделал это ** _ set.all (). Но дело в том, что Small_Model имеет дочерние классы, и я хотел в views.py узнать, к какому дочернему классу относится каждый из экземпляров Small_Model. Моя уловка заключалась в том, чтобы определить логические методы в модели Small_Model, такие как is_child_1 () и is_child_2 (). И когда это правда, вы применяете фактический дочерний указатель вместо указателя Small_Model.
Хорошо ... Это недостаточно ясно, но у меня нет времени, чтобы написать хороший пример, поэтому я просто скопирую сюда свой случай:
class Cache(models.Model):
valor = models.DecimalField(max_digits=9, decimal_places=2, blank= True, null= True)
evento=models.ForeignKey(Evento)
def __unicode__(self):
return u'%s: %s' % (self.evento, self.valor)
class Meta:
verbose_name='Cachê'
verbose_name_plural='Cachês'
def is_cb(self):
try:
self.cache_bilheteria
return True
except self.DoesNotExist:
return False
def is_co(self):
try:
self.cache_outro
return True
except self.DoesNotExist:
return False