我的django模型中有这个对象:
class Stock(models.Model):
name = models.CharField(null=True,blank=True,max_length=20)
def ___str__(self):
return self.name
def __unicode__(self):
return self.name
当我在django admin中看到它时效果很好。
但是当我想看到这个对象时,在管理员中:
class StockData(models.Model):
stock = models.ForeignKey(Stock,on_delete=models.PROTECT,null=True,blank=True)
date = models.DateTimeField(null=True,blank=True)
interval = models.CharField(null=True, blank=True,max_length=2)
def ___str__(self):
return self.stock+ ":" + str(self.date)
def __unicode__(self):
return self.stock + ":" + str(self.date)
使用此管理员:
from django.contrib import admin
from .models import StockData
# Register your models here.
class StockData_Admin(admin.ModelAdmin):
list_display = (
'date',
'stock',
'interval'
)
admin.site.register(StockData,StockData_Admin)
但在管理页面中,stock对象表示为:
Stock object (1)
编辑:
那么如何解决这个问题?
我的django版本:
>>> import django
>>> django.VERSION
(2, 0, 0, 'final', 0)
谢谢和问候
答案 0 :(得分:6)
你的con.commit()
except pymysql.Error as e:
raise
sys.exit(1)
finally:
if con:
con.close()
定义中有一个拼写错误 - Python的魔术方法以双下划线开始和结束,Stock
' str 目前以三个下划线而不是两个下划线开始。打印Stock
实例后,它会回退到Stock
default str implementation。删除了多余的下划线后,您会看到models.Model
正确显示:
答案 1 :(得分:0)
在models.py中尝试这样的事情(未经测试)
<table>
<tbody>
<tr>
<td rowspan="2">Outlet 1</td>
<td>BBZ</td>
<td>3</td>
</tr>
<tr>
<td>Regular</td>
<td>2</td>
</tr>
</tbody>
</table>
在admin.py中试试这个
class Stock(models.Model):
name = models.CharField(blank=True,max_length=20)
# charfield default value is empty string so null true not needed
def __str__(self):
title = 'Empty title'
if self.name != '':
title = self.name
return title
def __unicode__(self):
title = 'Empty title'
if self.name != '':
title = self.name
return title
class StockData(models.Model):
stock = models.ForeignKey(Stock,on_delete=models.PROTECT,null=True,blank=True)
date = models.DateTimeField(null=True,blank=True)
interval = models.CharField(blank=True,max_length=2)
def __str__(self):
title = 'Empty title'
if(all([self.stock, self.date])):
title = '{}:{}'.format(self.stock, self.date)
return title
def __unicode__(self):
title = ''
if self.stock and self.date:
title = self.stock + ':' + self.date
return title