2010-02-01 39 views
5

Tôi đang sử dụng ForeignKey được gọi là Memberno trong mô hình My Django. Sau khi nhập dữ liệu trong lớp thành viên, nó xuất hiện trong các lớp khác là "đối tượng thành viên" trong trường 'memberno'. Đối với ForeignKey, tôi đang sử dụng 'raw_id_fields' làm cách giải quyết, nhưng đối với các trường thông thường và thậm chí 'filter_horizontal', mỗi giá trị memberno được hiển thị là "đối tượng thành viên". Tôi muốn các giá trị xuất hiện khi họ đang ở trong lớp học thành viên ví dụ: 1, 2, ...Các kiểu đối tượng ForeignKey Django hiển thị Tên trường thay vì giá trị đối tượng

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

Cần định dạng mã nguồn để mã nguồn dễ đọc. –

Trả lời

4

Giao diện quản trị xuất hiện để sử dụng __str__() để xác định hiển thị mô hình. Tôi làm cho nó một habbit để luôn luôn xác định cả hai __unicode__()__str__() khi tôi tạo ra một mô hình. Ví dụ:

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) 

Cập nhật:
Có vẻ như bạn không phải là def __unicode__(self) thụt vào đúng trong mã của bạn. Kết quả là nó không phải là một phần của lớp học của bạn, và không được sử dụng. Thụt lề là rất quan trọng trong Python.

+0

Vâng, tôi đã đọc ở đâu đó rằng def __str__ không được khuyến khích vì nó có thể dẫn đến một số lỗi khiến Python bị lỗi –

+0

Vâng, nếu tôi thay đổi '__str __()' để trả về "FindMe", nó xuất hiện trong danh sách 'Hoạt động' vật. Nếu tôi thay đổi '__unicode __()' thành "FindMe", nó xuất hiện trong danh sách thả xuống cho các đối tượng khác có 'ForeignKey' thành' Activity'. Nó có thể được nản lòng, nhưng nó hoạt động. –

+0

tôi đã thay đổi để def __str __ (tự): \t trở lại "(% s)" % (self.memberno) nhưng nó vẫn không hiển thị các giá trị –

2

Tôi không chắc là tôi hiểu câu hỏi của bạn hoàn toàn, nhưng bạn đã định nghĩa một phương pháp unicode cho các mô hình của bạn?

+0

sự kiện lớp (models.Model): \t EventName = models.CharField (max_length = 25) \t eventID = models.AutoField (primary_key = True) \t chi tiết = models.TextField() \t attendanceFee = models.FloatField (max_length = 99) \t date = models.DateField() \t memberno = models.ManyToManyField (Thành viên) def __unicode __ (tự): \t trở lại u '% s% s% s' % (self.eventName, tự .eventID, self.memberno) \t Chuyên nghiệp của tôi blem là memeberno sẽ hiển thị "thành viên đối tượng" thay cho mỗi đối tượng thay vì các đối tượng thực tế như "1", "2", "3", v.v. –

+0

phần mềm, bạn sẽ cần phải định nghĩa phương thức 'unicode (self)' cho lớp 'Members'. – ayaz

+0

đã nó có thành viên lớp (models.Model): \t DESIGNATION_CHOICES = ( \t ('ADM', 'Administrator'), \t ('OFF', 'Câu lạc bộ chính thức'), \t ('MEM' , 'Ordinary Member'), \t) \t memberno = models.AutoField (primary_key = True) \t fname = models.CharField (max_length = 15) \t sName = models.CharField (max_length = 15) \t onames = models.CharField (max_length = 30, blank = True) \t email = models.EmailField() .... \t image = models.ImageField (max_length = 100, upload_to = 'ảnh /% Y /% m /% d', trống = True, null = True) \t def __unicode __ (self): \t return u '% s% s% s'% (self.fname, self.sname, self.memberno) –

Các vấn đề liên quan