来自另一个Django模型的Django模型max_length

时间:2019-06-07 16:01:16

标签: python django

我有两个模型。 模型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.

我想念什么?

3 个答案:

答案 0 :(得分:1)

您的操作方式有误。 Widen应该是整数,并且您正在传递max_length的{​​{1}}对象。 pythonFunctionType类的实例方法 并且您没有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