2010-02-01 109 views
5

我在我的Django模型中使用一個名爲Memberno的ForeignKey。在成員類中輸入數據後,它會在其他類中顯示爲「memberno」字段中的「成員對象」。對於ForeignKey,我使用'raw_id_fields'作爲解決方法,但對於普通字段甚至'filter_horizo​​ntal',每個memberno值都顯示爲「成員對象」。我希望值顯示爲它們在成員類,即1,2,...Django模型ForeignKey對象顯示字段名稱而不是對象值

from django.db import models 

# Create your models here. 
class Members(models.Model): 
    DESIGNATION_CHOICES=(
    ('ADM', 'Administrator'), 
    ('OFF', 'Club Official'), 
    ('MEM', 'Ordinary Member'), 
    ) 
    memberno = models.AutoField(primary_key=True) 
    fname = models.CharField(max_length=15) 
    sname = models.CharField(max_length=15) 
    onames = models.CharField(max_length=30, blank=True) 
    email = models.EmailField() 
    phoneNumber = models.CharField(max_length=15) 
    regNo = models.CharField(max_length=15) 
    designation = models.CharField(max_length=3,choices=DESIGNATION_CHOICES) 
    image = models.ImageField(max_length=100,upload_to='photos/%Y/%m/%d', blank=True, null=True) 
    course = models.CharField(max_length=30, blank=True, null=True) 


def __unicode__(self): 
    return u'%s %s %s' % (self.fname, self.sname, self.memberno) 


def get_absolute_url(self): 
    return '%s%s/%s' % (settings.MEDIA_URL, settings.ATTACHMENT_FOLDER, self.id) 

def get_download_url(self): 
    return '%s%s/%s' % (settings.MEDIA_URL, settings.ATTACHMENT_FOLDER, self.name) 




class Security(models.Model): 
    memberno = models.ForeignKey(Members, unique=True) 
    username = models.CharField(max_length=30, primary_key=True) 
    password = models.CharField(max_length=70) 

def __unicode__(self): 
    return u'%s %s %s' % (self.username, self.password, self.memberno) 


class Subscriptions(models.Model): 
    memberno = models.ForeignKey(Members) 
    receiptNo = models.CharField(max_length=30, primary_key=True) 
    type = models.CharField(max_length=50) 
    date = models.DateField() 
    amount = models.FloatField(max_length=99) 

def __unicode__(self): 
    return u'%s %s %s' % (self.receiptno, self.type, self.memberno) 




class events(models.Model): 
    eventName = models.CharField(max_length=25) 
    eventID = models.AutoField(primary_key=True) 
    details = models.TextField() 
    attendanceFee = models.FloatField(max_length=99) 
    date = models.DateField() 
    memberno = models.ManyToManyField(Members) 



def __unicode__(self): 
    return u'%s %s %s' % (self.eventName, self.eventID, self.memberno) 
+0

需要對源代碼進行格式化以使其易讀。 – 2010-02-01 18:11:37

回答

4

管理界面似乎使用__str__()來確定模型的顯示。我創建一個模型時總是定義__unicode__()__str__()。例如:

class Activity(models.Model): 
    activity_code = models.ForeignKey(ActivityCode) 
    note = models.TextField(blank=True) 
    def __str__(self): 
     return "(%s) %s" % (self.activity_code.short, self.note) 
    def __unicode__(self): 
     return u'(%s) %s' % (self.activity_code.short, self.note) 

更新:
看起來好像你def __unicode__(self)是不是在你的代碼的縮進正確。因此它不是你班級的一部分,也沒有被使用。縮進在Python中非常重要。

+0

嗯,我已經讀了def __str__不鼓勵,因爲它可能導致一些錯誤,導致Python崩潰 – 2010-02-01 17:51:51

+0

如果我改變__str __()'返回「FindMe」,它出現在「Activity」列表中目的。如果我將'__unicode __()'更改爲「FindMe」,它會顯示在其他具有'ForeignKey'到'Activity'的對象的下拉菜單中。它可能是灰心的,但它有效。 – 2010-02-01 18:10:54

+0

我改 高清__str __(個體經營): \t回報「(%S)」%(self.memberno) 但它仍然沒有顯示值 – 2010-02-01 18:35:38

2

我不知道我完全理解你的問題,但你的模型中定義的方法unicode

+0

類事件(models.Model): \t eventName的= models.CharField(MAX_LENGTH = 25) \t EVENTID = models.AutoField(primary_key =真) \t細節= models.TextField() \t attendanceFee = models.FloatField( MAX_LENGTH = 99) \t日期= models.DateField() \t memberno = models.ManyToManyField(會員) 高清__unicode __(個體經營): \t回U '%s%S%S' %(self.eventName,自.eventID,self.memberno) \t 我的專業瑕疵是,memeberno將顯示「成員對象」來代替每個對象而不是實際的對象,如「1」,「2」,「3」等。 – 2010-02-01 15:18:39

+0

gramware,您需要定義一個「unicode(self)」方法對於'Members'類也是如此。 – ayaz 2010-02-01 15:43:48

+0

它已經在那裏 類成員(models.Model): \t DESIGNATION_CHOICES =( \t( 'ADM', '管理員'), \t( 'OFF', '俱樂部官方'), \t( 'MEM' , '普通會員'), \t) \t memberno = models.AutoField(primary_key =真) \t FNAME = models.CharField(MAX_LENGTH = 15) \t SNAME = models.CharField(MAX_LENGTH = 15) \t ONAMES = models.CharField(max_length = 30,空白=真) \t email = models.EmailField() .... \t image = models.ImageField(max_length = 100,upload_to ='photos /%Y /%m /%d',blank = True,null = True) \t def __unicode __(self): \t return u'%s%s%s'%(self.fname,self.sname,self.memberno) – 2010-02-01 15:52:43

相關問題