是否可以根据方法的输出将Django BooleanField默认值设置为True或False?

时间:2014-09-02 01:06:33

标签: python django checkbox methods

我知道如何设置默认值,但我不确定是否可以通过方法定义它。

@mrdurant:起初这是一个范围问题,我在调用函数之前有一个布尔字段,我把它放在函数之后但现在我得到以下错误:

has_photo只取1个参数(0给定)”

我尝试传递参数,但无法让它发挥作用。

注意:has_photo函数会评估另一个类(HousingPhotos)中的表是否保存了任何内容。

class Housing(models.Model):
    h_type = models.CharField(max_length=16)
    transaction = models.CharField(max_length=16)
    pub_date = models.DateTimeField('publicado')

    def has_photo(self):
        test = Housing(self.pk)
        if test.housingphotos_set.count() == 0:
            return False
        else:
            return True
    has_photo.boolean= True
    show_photo = models.BooleanField(default=has_photo)

2 个答案:

答案 0 :(得分:0)

您可以在默认值

中设置可调用对象
def bar():
    return boolean

your_boolean_field = models.BooleanField(default=bar)

或覆盖模型的保存方法。

def save(self, *args, **kwargs):
    self.boolean_field = self.your_method()
    super(ModelClass, self).save(*args, **kwargs)

def you_method(self) 
   return your_boolean #return true or false

答案 1 :(得分:0)

因为has_photo是一个方法,所以你需要能够将self作为第一个参数传递(django假设一个常规函数)。你可以把它从类中带出来作为常规函数,或构建一个函数来调用适当的参数:

default=lambda: self.has_photo()

将此表达为更详细的函数/方法调用

可能更好