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