模型中的 Django 外键
Django foreign key in model
我正在做一个项目,因此创建了一个模型并将所有数据导入到 django admin,所以我的 table 看起来像这样
Dates Sr no Symbol Series Qty
Oct. 19, 2013 245 ZYDUSWELL EQ 5
Oct. 19, 2013, 244 ZEEL EQ 96
Oct. 19, 2013, 243 YESBANK EQ 74
Oct. 19, 2013, 242 WIPRO EQ 65
我创建了另一个 table 它描述了列符号的完整形式,但客户端需要显示完整形式而不是上面显示的符号 table 我该如何实现这是我的代码
给定的模型table
class Auction(models.Model):
dates = models.DateTimeField(editable=False,null=True)
sr_no = models.IntegerField(editable=False,null=True)
symbol = models.CharField(max_length=35, editable=False)
series = models.CharField(max_length=35, editable=False,null=True)
qty = models.IntegerField(editable=False,null=True)
模型包含符号的完整形式
class Sttlmnt_typ_Master(models.Model):
symbol = models.CharField(max_length=10, editable=False)
symbol_name = models.CharField(max_length=35, editable=False)
-----请帮助我.......!!!!
最好的方法是将 symbol
字段作为 Sttlmnt_typ_Master
的外键。
但是如果你确实想要这样的模型,那么给你添加这个方法ModelAdmin
:
class AuctionAdmin(admin.ModelAdmin):
list_display = ('dates', 'sr_no', 'symbol_display', 'series', 'qty')
def symbol_display(self, obj):
symbol = Sttlmnt_typ_Master.objects.filter(symbol=obj.symbol).first()
return symbol.symbol_name if symbol else obj.symbol
symbol_display.short_description = 'Symbol'
这会起作用,但过滤 Sttlmnt_typ_Master
管理中的每一行效率非常低。您应该考虑切换到 "foreign key" 选项。
编辑:外键选项。
将 __unicode__
方法添加到 Sttlmnt_typ_Master
模型并将 Auction.symbol
字段更改为 ForeignKey
:
class Sttlmnt_typ_Master(models.Model):
symbol = models.CharField(max_length=10, editable=False)
symbol_name = models.CharField(max_length=35, editable=False)
def __unicode__(self):
return self.symbol_name
class Auction(models.Model):
dates = models.DateTimeField(editable=False, null=True)
sr_no = models.IntegerField(editable=False, null=True)
symbol = models.ForeignKey(Sttlmnt_typ_Master, editable=False)
series = models.CharField(max_length=35, editable=False, null=True)
qty = models.IntegerField(editable=False, null=True)
现在管理员中的更改列表将显示 symbol
字段和 symbol_name
属性。 Django 管理员足够聪明,可以将 select_related('symbol')
添加到查询集中,因此不会对数据库进行额外的查询。
当然,您应该更改您的导入功能,以使用有效的 Sttlmnt_typ_Master
实例而不是纯文本填充 Auction.symbol
字段。
EDIT2:填充 Auction.symbol
字段。
symbol = 'ZYDUSWELL'
auction.symbol, created = Sttlmnt_typ_Master.objects.get_or_create(
symbol=symbol, defaults={'symbol_name': symbol})
我正在做一个项目,因此创建了一个模型并将所有数据导入到 django admin,所以我的 table 看起来像这样
Dates Sr no Symbol Series Qty
Oct. 19, 2013 245 ZYDUSWELL EQ 5
Oct. 19, 2013, 244 ZEEL EQ 96
Oct. 19, 2013, 243 YESBANK EQ 74
Oct. 19, 2013, 242 WIPRO EQ 65
我创建了另一个 table 它描述了列符号的完整形式,但客户端需要显示完整形式而不是上面显示的符号 table 我该如何实现这是我的代码
给定的模型table
class Auction(models.Model):
dates = models.DateTimeField(editable=False,null=True)
sr_no = models.IntegerField(editable=False,null=True)
symbol = models.CharField(max_length=35, editable=False)
series = models.CharField(max_length=35, editable=False,null=True)
qty = models.IntegerField(editable=False,null=True)
模型包含符号的完整形式
class Sttlmnt_typ_Master(models.Model):
symbol = models.CharField(max_length=10, editable=False)
symbol_name = models.CharField(max_length=35, editable=False)
-----请帮助我.......!!!!
最好的方法是将 symbol
字段作为 Sttlmnt_typ_Master
的外键。
但是如果你确实想要这样的模型,那么给你添加这个方法ModelAdmin
:
class AuctionAdmin(admin.ModelAdmin):
list_display = ('dates', 'sr_no', 'symbol_display', 'series', 'qty')
def symbol_display(self, obj):
symbol = Sttlmnt_typ_Master.objects.filter(symbol=obj.symbol).first()
return symbol.symbol_name if symbol else obj.symbol
symbol_display.short_description = 'Symbol'
这会起作用,但过滤 Sttlmnt_typ_Master
管理中的每一行效率非常低。您应该考虑切换到 "foreign key" 选项。
编辑:外键选项。
将 __unicode__
方法添加到 Sttlmnt_typ_Master
模型并将 Auction.symbol
字段更改为 ForeignKey
:
class Sttlmnt_typ_Master(models.Model):
symbol = models.CharField(max_length=10, editable=False)
symbol_name = models.CharField(max_length=35, editable=False)
def __unicode__(self):
return self.symbol_name
class Auction(models.Model):
dates = models.DateTimeField(editable=False, null=True)
sr_no = models.IntegerField(editable=False, null=True)
symbol = models.ForeignKey(Sttlmnt_typ_Master, editable=False)
series = models.CharField(max_length=35, editable=False, null=True)
qty = models.IntegerField(editable=False, null=True)
现在管理员中的更改列表将显示 symbol
字段和 symbol_name
属性。 Django 管理员足够聪明,可以将 select_related('symbol')
添加到查询集中,因此不会对数据库进行额外的查询。
当然,您应该更改您的导入功能,以使用有效的 Sttlmnt_typ_Master
实例而不是纯文本填充 Auction.symbol
字段。
EDIT2:填充 Auction.symbol
字段。
symbol = 'ZYDUSWELL'
auction.symbol, created = Sttlmnt_typ_Master.objects.get_or_create(
symbol=symbol, defaults={'symbol_name': symbol})