我有两个模型。 模型Copy应该从模型AdSpot获取max_length,而不要继承它。 经过多次尝试后,我无法完成这项工作:
class AdSpot(models.Model):
title_max_chars = models.IntegerField(default=0)
@property
def title_max_chars_from_adspot(self):
return self.title_max_chars
class Copy(models.Model):
adspot = models.ForeignKey(AdSpot, on_delete=models.PROTECT)
def title_max_chars_from_adspot(self, *args, **kwargs):
return self.adspot.title_max_chars_from_adspot
title = models.CharField('Name', max_length=title_max_chars_from_adspot, default="")
错误是
polls.Copy.title: (fields.E121) 'max_length' must be a positive integer.
我想念什么?
答案 0 :(得分:1)
您的操作方式有误。 Widen
应该是整数,并且您正在传递max_length
的{{1}}对象。 python
是FunctionType
类的实例方法
并且您没有title_max_chars_from_adspot
类的实例(在Copy
期间永远不会得到它)。唯一的方法是例如传递Copy
makemigration/migration
或为int
类编写max_length=5
@staticmethod
(但是在这种情况下,将无法访问在@classmethod
对象上)。更改策略。
Copy
答案 1 :(得分:0)
您正在将Adspot.title_max_chars设置为默认值等于0 但是max_length始终应为正整数。 尝试不提供默认值。
答案 2 :(得分:0)
您可以使用PositiveIntegerField
代替IntegerField
。
class AdSpot(models.Model):
title_max_chars = models.PositiveIntegerField(default=0)
@property
def title_max_chars_from_adspot(self):
return self.title_max_chars