我有一个像下面这样的类结构:
class Parent(models.Model):
some_fields = ...
def get_related_child_file_models_info(self):
"""
This return a generator containing all the related file model
info for each child
"""
links = (
[f.name, f]
for f in self._meta.get_fields()
if (f.one_to_many or f.one_to_one)
and f.auto_created
and not f.concrete
and "files" in f.name
)
return links
class ChildFileA(models.Model):
...
parent = models.ForeignKey(
on_delete=models.CASCADE,
related_name="child_a_files"
)
file = models.FileField()
...
class ChildFileB(models.Model):
...
parent = models.ForeignKey(
on_delete=models.CASCADE,
related_name="child_b_files"
)
file = models.FileField()
...
如果我在for循环中使用此生成器,则会得到
['child_a_files', <ManyToOneRel: app_name.childfilea>]
和
['child_b_files', <ManyToOneRel: app_name.childfileb>]
我的目标是处理一个复杂的文件上传过程,在该过程中,我有大约30种不同的模型为每个父母存储一些文件。
而且,我尽量避免为每个代码手动创建代码。
如何获取类名 ChildFileA
和 ChildFileB
从 ManyToOneRel
对象?
您可以使用访问这些.field.model
。例如:
def get_related_child_file_models_info(self):
return [
(f.name, f.field.model)
for f in self._meta.get_fields()
if (f.one_to_many or f.one_to_one)
and f.auto_created and not f.concrete
and "files" in f.name
]
这将返回对该模型的类的引用。因此,这里将引用ChildFileA
和ChildFileB
。您可以访问.__name__
该类的属性以获得类名称,例如:
def get_related_child_file_models_info(self):
return [
(f.name, f.field.model.__name__)
for f in self._meta.get_fields()
if (f.one_to_many or f.one_to_one)
and f.auto_created and not f.concrete
and "files" in f.name
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句