2015-01-09 2 views
1

Я делаю проект, поэтому созданный одну модель и импортировать все данные Джанго админ поэтому мой стол выглядит такДжанго внешнего ключа в модели

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 

я создал еще одну таблицу, которые описывают полную форму колонки символ, но клиент должен отображать полную форму вместо отображаемого символа в таблице выше, как я могу добиться этого это мой код

модель для данной таблицы

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) 

Модель содержит полную форму символа

----- нежно пожалуйста, помогите мне ....... !!!!

ответ

2

Лучшим способом является наличие поля 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 для каждой строки в админ очень неэффективно. Вы должны рассмотреть возможность переключения на «внешний ключ».

EDIT: опция внешнего ключа.

Добавить метод __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') в запрос, поэтому дополнительных запросов к базе данных не будет.

Конечно, вы должны изменить свою функцию импорта, чтобы заполнить поля Auction.symbol действительными Sttlmnt_typ_Master экземплярами вместо обычного текста.

EDIT2: Заполнение Auction.symbol Поле.

symbol = 'ZYDUSWELL' 
auction.symbol, created = Sttlmnt_typ_Master.objects.get_or_create(
          symbol=symbol, defaults={'symbol_name': symbol}) 

See the documentation.

+0

Как я могу реализовать его с помощью ключа foriegn, пожалуйста, дайте мне eaxample – Krish

+1

Первый код просто отлично работает и благодарит за вашу ценную информацию – Krish

+0

Я не понял реализацию внешнего ключа, вы можете мне помочь. После применения вышеуказанного кода все должно быть сделано в admin.py @catavaran – Krish

Смежные вопросы