Я пробовал несколько апробаций, но поскольку я не могу использовать self в классе, я сам. __class__.__name__
недоступен. Нужно ли мне переопределить метод save для этого? Спасибо за вашу помощь.получить имя класса модели Django в поле
ответ
Ваш вопрос странно сформулирован, поэтому я собираюсь подойти к нему сбоку.
Предположим, что вы определили модель Foo
следующим образом:
from django.db import models
class Foo(models.Model):
foo = models.IntegerField()
bar = models.IntegerField()
def klass(self):
return self.__class__.__name__
Предположив запуске оболочки Django (python manage.py shell
), вы можете сделать следующее:
>>> from foo.models import Foo
>>> foo = Foo()
>>> print foo.klass()
Foo
Это свидетельствует о том, что вы можете обязательно используйте self.__class__.__name__
в корпусе любого метода для модели Foo
. Таким образом, у вас должен быть другой контекст, в котором вам нужно динамически определять фактическое имя класса для вашей модели, но не из экземпляра вашей модели.
Если вы закончили определение модели, то следующее является законным:
>>> print Foo._meta.object_name
Foo
Этот механизм позволит вам сделать самоанализ непосредственно против модели, без необходимости создания экземпляра модели.
Если это не сработает для вас, вам необходимо это во время фактического определения модели. В этом случае я бы с уважением предположил, что если вы знаете, что вы определяете модель Foo
, вы должны просто указать код Foo
, где бы вы ни нуждались. Если вам действительно нужен динамический путь во время создания вашей модели, чтобы определить имя модели ... можете ли вы описать фактическую проблему, которую вы пытаетесь решить, чтобы мы могли помочь вам ее решить?
Это более или менее то, что я хочу:
class VFXContainer(models.Model):
classname=models.CharField(max_length=60,editable=False,blank=True)
parent=models.ForeignKey("self",blank=True,null=True)
def save(self, *args, **kwargs):
self.classname=self.__class__.__name__
super(VFXContainer, self).save(*args, **kwargs)
class Company(VFXContainer):
class Meta:
verbose_name_plural="companies"
class Project(VFXContainer):
pass
class CustomVFXContainer(VFXContainer):
pass
Теперь, что я не знаю, как сделать, я хочу «переопределить» вариант limit_choices_to в родительском поле на дочерних классах. То, что я хочу, - это CustomVFXContainer для того, чтобы быть родителем для любого типа класса, Project только для того, чтобы быть зарегистрированным Компанией, и Компания не должна быть родительской. Im использует эту структуру по следующей причине. Там будет тонна полей, которые я хочу быть во всех подклассах, и у меня также есть отдельные модели задач, которые связаны через внешний ключ с базовым классом VFXContainer (и, следовательно, могут быть прикреплены к любому из дочерних классов) , Надеюсь, это поможет вам понять, что я пытаюсь достичь, спасибо за вашу помощь.
Вы должны посмотреть на ** django-polymorphic-tree ** https://github.com/edoburu/django-polymorphic-tree - он объединяет древовидную структуру с использованием mptt с полиморфными моделями, чтобы вы могли подключать разрозненные модели так, как вы описываете ... предполагая, что это конвейерная сделка, которую вы хотите проверить на производительность, хотя, если у вас есть много задач – mogga
- 1. Получить имя класса Джанго модели
- 2. Получить имя приложения в модели Django
- 3. Django: подполя в поле модели
- 4. Как получить имя класса ContentType в django
- 5. Немодельное поле в модели Django
- 6. Динамическое поле в модели Django
- 7. модели Django: динамически генерировать модели поле
- 8. Получить поле формы Django из поля модели
- 9. Django: получить связанный класс модели из родительского класса модели
- 10. запрос модели django ManyToMany поле
- 11. Поле модели Django Blob
- 12. Поле идентификатора в модели Django
- 13. Django: сохранение в поле модели
- 14. Понимание класса модели Django
- 15. скрыть поле модели в форме в django
- 16. Модели Django: Почему имя сталкивается?
- 17. Сортировка ManyToMany поле автоматически в модели Django
- 18. Как проверить поле в модели django?
- 19. Пользовательское поле модели Django MultilingualTextField
- 20. Поле Django ManyToMany не создано в модели
- 21. Пропустить регистрацию пользователя в поле модели django
- 22. Получить поле модели как строку
- 23. Метод модели Django не обновляет поле модели
- 24. Django 1.7 удалить поле. Неизвестное поле (поле), указанное для модели
- 25. Django Forms: Скрытое поле модели?
- 26. Django создает настраиваемое поле модели
- 27. Django модели ссылочное поле Match
- 28. Сохраните поле модели Django в новый файл
- 29. Пользовательские модели поле рендеринг в шаблоне Django
- 30. Модели Django. Получить класс модели
попробуйте сам .__ класс __.__ name__ вместо. – twneale
извините, что это была опечатка, она тоже не работает. Self не доступен в теле моделей django ... – user443850