это мой models.pyДжанго, как знать точный тип класса ребенка (если это возможно)
class UserWidget(models.Model):
user = models.ForeignKey(User, related_name="widgets")
widget = models.ForeignKey(Widget)
options = JSONField(default="{}")
category = models.ManyToManyField(WidgetUserCategory)
class UserWidgetAtomic(UserWidget):
atomic = models.ForeignKey(Atomic)
class UserWidgetNonAtomic(UserWidget):
nonatomic = models.ForeignKey(NonAtomic)
На моем views.py я делаю это:
widgets = category.userwidget_set.all()
или это (это не имеет значения)
widgets = user.widgets.all()
Я хотел бы знать (если это возможно), а итерацию типа подклассов объекта. возможно
, например
for item in widgets:
if item.__class__.__name__ == "UserWidgetAtomic":
do this
elif item.__class__.__name__ == "UserWidgetNonAtomic":
do that
ли это? Как?
Somthing like 'if isinstance (item, UserWidgetAtomic): ...' https://docs.python.org/2/library/functions.html#isinstance – allcaps
Да, но это не работает. Хотя isinstance (item, UserWidget) дает мне True, isinstance (item, UserWidgetAtomic) дает мне False – xpanta
Я думаю, что структура таблицы слишком сложна. Мне кажется, что 'UserWidget' следует использовать как промежуточную модель many2many. Не могли бы вы добавить свою модель «Atomic» и «NonAtomic» к вашему вопросу? Кроме того, '' '' кажется неуместным на модели 'UserWidget'. Это очень много, поэтому имя должно быть «категориями». – trixn