我已经尝试了多种方法,但是因为我不能在类体中使用self,所以我自己。 __class__.__name__
不可用。我需要重写保存方法来做到这一点?谢谢你的帮助。将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
这表明,你可以对于型号Foo
的任何方法,肯定使用self.__class__.__name__
。因此,您必须有一些其他上下文,您需要动态确定模型的实际类名称,而不是从模型的实例中确定。
如果你已经完成定义模型,再下面是合法的:
>>> 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只被公司授权,并且公司根本不授予授权。我使用这个结构的原因如下。我希望在所有子类中都有很多字段,并且我还有一个单独的Tasks模型,它通过外键链接到基本VFXContainer类(因此可以连接到任何子类) 。希望这可以让我更清楚自己想要达到的目标,谢谢你的帮助。
你应该看看** django-polymorphic-tree ** https://github.com/edoburu/django-polymorphic-tree-它结合了使用mptt的树结构使用多态模型,所以你可以用你描述的方式连接不同的模型...假设这是一个管道交易,你会想要测试它的性能,但如果你有很多任务 – mogga 2016-04-07 18:11:31
- 1. 将CharGield中的Django模型字段的类型更改为ForeignKey
- 2. 在Django模型中将字段命名为'id'是否安全?
- 3. Django模型字段有多种类型?
- 4. 将模型字段插入Django中现有的模型字段
- 5. Django使模型字段名称链接
- 6. 什么字段类型用于Django中的模型字段?
- 7. Django unique_together模型父类字段
- 8. Django抽象基类的模型字段
- 9. DRF改变Django模型的字段名值与外键
- 10. Django模型:参考字段返回多种类型的模型
- 11. Django模型字段默认为空
- 12. Django:结构Django模型允许任意字段类型
- 13. Django:模型字段内的子字段
- 14. Django模型迭代字段
- 15. Django模型字段索引
- 16. django模型字段比较
- 17. Django模型 “斑点” 字段
- 18. 填充Django模型字段
- 19. Django Blob模型字段
- 20. Django:使用其他模型类作为字段的选项
- 21. 将属性转换为django模型字段
- 22. Django - 如何将模型字段重置为默认值?
- 23. 与模型字段名
- 24. 基于Django模型字段计算的模板变量
- 25. 我该如何使用不同于模型字段名称的字段名称来创建Django模型表单?
- 26. Django:与同一类型的多个相关字段的模型
- 27. 如何在Django模型中实现类似字典的字段?
- 28. 凌主编的Django模型自动完成数据库模型字段类型
- 29. django:在哪里可以找到模型字段类型转换为postgres
- 30. Django模型:同一个对象的类型,不同的字段类型
尝试使用self .__ class __.__ name__代替。 – twneale 2010-10-30 22:14:54
对不起,这是一个错字,它也不工作。自我在Django模型的主体中不可用... – user443850 2010-10-31 00:31:26