开发者

django ForeignKey model filter in admin-area?

Hi I need really very very simple example. First my models:

#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. Let see my ClassRooms Model.

#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

How can i show in the class_student_cities area the Students.student_city datas? I guess that about django-admin area. When i do it withclass_student_cities = models.ForeignKey(Students) i just see in that area the Students.student_name data (ex: John Smith). I want to see JUST Students.student_cities data (ex: NewYork). Can you give me a little example?

Should i use something like that:

class_student_cities = models.ForeignKey(Students.student_开发者_开发百科cities)

Many Thanks!


Try redifinition unicode method.

def __unicode__(self):
        return self.student_city 

So you'll see in the field student city.

Well, I tried to remake your application to set data with forms class. Something like this in admin.py in your application:

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)

Maybe you'll need to fix something, but I hope it will work. You will set init function to your forms, so in admin panel you set all choices to everything you keep in your Students model. csc.id you'll need to make this object iterable (cities aren't unique) and then you can choose everything from Students model to set in the field.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜