2010-02-01 108 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

相关问题