我想在FileField中添加一个属性,以便我可以指定何时向模型添加字段。
class TestFile(models.Model):
c206 = CategoryFileField(
category='206'
)
并从模型实例中获取相同的值。
tf = TestFile.objects.latest('id')
tf.c206.category # 206
我尝试使用ImageFileField类比扩展FileFiled:
class CategoryMetadataMixin(object):
@property
def category(self):
return self.category
class CategoryFieldFile(CategoryMetadataMixin, FieldFile):
pass
class CategoryFileField(FileField):
attr_class = CategoryFieldFile
descriptor_class = FileDescriptor
description = _("File")
def __init__(self, verbose_name=None, name=None, category='', **kwargs):
self.attr_class.category = category
super().__init__(verbose_name, name, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
if self.category:
kwargs['category'] = self.category
return name, path, args, kwargs
但在这种情况下,category
始终返回''
。显然我走错了路。
答案 0 :(得分:0)
今天心情清晰,我更仔细地研究了这些来源。最后,事实证明:
class CategoryFieldFile(FieldFile):
@property
def category(self):
return self.field.category
@category.setter
def category(self, value):
self.field.category = value
class CategoryFileField(FileField):
attr_class = CategoryFieldFile
descriptor_class = FileDescriptor
description = _("File")
def __init__(self, verbose_name=None, name=None, category='', **kwargs):
self.category = category
super().__init__(verbose_name, name, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
if self.category:
kwargs['category'] = self.category
return name, path, args, kwargs
这是有效的。