我已經嘗試了多種方法,但是因爲我不能在類體中使用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中的模型字段?
- 8. Django抽象基類的模型字段
- 9. Django unique_together模型父類字段
- 10. DRF改變Django模型的字段名值與外鍵
- 11. Django模型:參考字段返回多種類型的模型
- 12. Django模型字段默認爲空
- 13. Django:結構Django模型允許任意字段類型
- 14. 將django模型字符串字段作爲str代替unicode
- 15. Django:模型字段內的子字段
- 16. Django模型:刪除字段
- 17. Django模型編號字段
- 18. Django模型 - 數量字段
- 19. django模型字段比較
- 20. Django模型字段索引
- 21. Django動態模型字段
- 22. Django Blob模型字段
- 23. Django模型:NULLable字段
- 24. Django模型迭代字段
- 25. Django模型手機字段
- 26. 填充Django模型字段
- 27. Django模型 「斑點」 字段
- 28. Django模型與Cloudinary字段
- 29. Django模型:爲什麼名字衝突?
- 30. Django模板:表單字段名稱作爲變量?
嘗試使用self .__ class __.__ name__代替。 – twneale 2010-10-30 22:14:54
對不起,這是一個錯字,它也不工作。自我在Django模型的主體中不可用... – user443850 2010-10-31 00:31:26