管理区域中的django ForeignKey模型过滤器?

时间:2011-07-25 22:12:09

标签: django django-admin django-forms django-admin-filters

您好我需要非常非常简单的例子。首先是我的模特:

#This my student models
from django.db import models
SEX_CHOICES= (
    ('M', 'Male'),
    ('F', 'Female'),
)
class Students(models.Model):
    student_name = models.CharField(max_length=50)
    student_sex = models.CharField(max_length=8, choices=SEX_CHOICES)
    student_city = models.Charfield(max_length=50)
    student_bio = models.TextField()

    def __unicode__(self):
        return self.student_name

O.K。让我们看看我的ClassRooms模型。

#This my ClassRooms models
from django.db import models
from myproject.students.models import *
class ClassRooms(models.Model):
    class_number= models.CharField(max_length=50)
    class_student_cities = models.ForeignKey(Students)
    class_year = models.DateField()

    def __unicode__(self):
        return self.class_number

我如何在class_student_cities区域显示Students.student_city数据?我想那是关于django-admin区域的。当我使用class_student_cities = models.ForeignKey(Students)时,我只在该区域看到Students.student_name数据(例如:John Smith)。我想看JUST Students.student_cities数据(例如:NewYork)。 你能举个例子吗?

我应该使用类似的东西:

class_student_cities = models.ForeignKey(Students.student_cities)

非常感谢!

1 个答案:

答案 0 :(得分:1)

尝试重新定义 unicode 方法。

def __unicode__(self):
        return self.student_city 

所以你会在学生城里看到。

好吧,我试图重新设置您的应用程序以使用表单类设置数据。在你的应用程序的admin.py中有这样的东西:

from django.contrib import admin
from django import forms
from myapp.models import *

class ClassRoomsAdminForm(forms.ModelForm):
    class Meta:
        model = ClassRoom
    def __init__(self, *arg, **kwargs):
        super(ClassRoomsAdminForm, self).__init__(*arg, **kwargs)
        self.fields[' class_student_cities'].choices = [(csc.id,csc.student_city) for csc in Students.objects.all()

class ClassRoomsAdmin(admin.ModelAdmin):
    form = ClassRoomsAdminForm

admin.site.register(ClassRooms,ClassRoomsAdmin)

也许你需要修理一些东西,但我希望它会起作用。您将 init 功能设置为表单,因此在管理面板中,您可以将所有选项设置为您在学生模型中保留的所有内容。 csc.id你需要使这个对象可迭代(城市不是唯一的),然后你可以选择从学生模型到现场设置的所有内容。