Django-get\u FOO\u显示方法-显示选项长名称

Django-get\u FOO\u显示方法-显示选项长名称,django,django-haystack,Django,Django Haystack,我正在尝试在我的模型上创建一个或多个方法,以便为我的选择返回“长名称”。我显然不理解“Model.get\u FOO\u display()”方法,或者我正在做一些语法上的屠杀。最终的计划是使用(model_attr='xxx')获取(haystack)search_index.py中的“长名称”。我已经搜索了几个小时,还没有找到一个有效的例子。我很感激你能提供的任何建议。谢谢 Models.py new_used = ( ('n', 'new'), ('u', 'used'),

我正在尝试在我的模型上创建一个或多个方法,以便为我的选择返回“长名称”。我显然不理解“Model.get\u FOO\u display()”方法,或者我正在做一些语法上的屠杀。最终的计划是使用(model_attr='xxx')获取(haystack)search_index.py中的“长名称”。我已经搜索了几个小时,还没有找到一个有效的例子。我很感激你能提供的任何建议。谢谢

Models.py

new_used = (
    ('n', 'new'),
    ('u', 'used'),
)

broker = (
    ('n', 'No'),
    ('y', 'Yes'),
)

class Flist(models.Model):
    createdate = models.DateTimeField(auto_now_add=True)
    expirydate = models.DateTimeField(null=True, blank=True)
    price = models.IntegerField(null=True, blank=True)
    new_used = models.CharField(max_length=1, blank=True, choices=new_used, default='u')    
    broker_y_n = models.CharField(max_length=1, blank=True, choices=broker, default='n')
    mfr = models.CharField(max_length=80, blank=True)    
    listing_type = models.ForeignKey(ListingType)
    listing_status = models.ForeignKey(ListingStatus, default=3)
    location_zip = models.IntegerField(null=True, blank=True)    
    customer = models.ForeignKey(Customer)

    def nu(self):
        return Flist.get_new_used_display

    def byn(self):
        return Flist.get_broker_y_n_display 
search_index.py

class FlistIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)    
    createdate = indexes.DateTimeField(model_attr='createdate', faceted=True)
    price = indexes.IntegerField(model_attr='price',  faceted=True)
    new_used = indexes.CharField(model_attr='nu',  faceted=True)
    broker_y_n = indexes.CharField(model_attr='byn',  faceted=True)
    mfr = indexes.CharField(model_attr='mfr',  faceted=True)
    listing_type = indexes.CharField(model_attr='listing_type',  faceted=True)
    listing_status = indexes.CharField(model_attr='listing_status',  faceted=True)
    location_zip = indexes.IntegerField(model_attr='location_zip',  faceted=True)

    def get_model(self):
        return Flist
问题还在继续

确定将“坏”方法更改为属性:

    @property
    def nu(self):
       return self.get_new_used_display()

    @property
    def byn(self):
       return self.broker_y_n_display()
似乎haystack不喜欢(找不到“model”属性(ibutes)“byn”或“nu”,因此不会索引


在我开始使用methods和@property之前,我得到的是名称和方面计数,但名称是短版本。在FlistIndex中获取模型的长名称的正确语法是什么?

您返回的是方法本身,而不是方法返回的值,即:

def nu(self):
    return self.get_new_used_display
您需要执行以下操作:

def nu(self):
    return self.get_new_used_display()
正如@DanielRoseman所指出的,上面的代码被编辑为使用
self
,而不是
Flist
(实例与类)

更新

另外,FWIW,如果您要将方法调用包装成较短的版本(例如
.nu()
相当于
.get\u new\u used\u display()

@property
def nu(self):
    return self.get_new_used_display()

然后,您可以像模型上的任何其他属性一样执行
一些\u flist.nu
(注意,不带括号)。这样或那样都无所谓,但那样会更干净一些。

Duh--语法屠宰(我的敌人)!谢谢。不过这不起作用,因为这些是实例方法,而不是类方法。你应该在
self
,而不是
Flist
上调用它们。虽然我不知道你为什么要定义一个只返回另一个方法值的方法。@DanielRoseman:哈哈,我在更新中已经自我更正了,但没有成功开始的时候,请看上面的问题继续部分…仍然有问题。我能不能忘记模型上的方法和@properties,在searchenxes.py中做点什么,比如--new\u used=index.CharField(model\u attr='self.get\u new\u used\u display(),faceted=True)