django ForeignKey model filter in admin-area?

风格不统一 提交于 2019-12-23 03:51:34

问题


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!


回答1:


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.



来源:https://stackoverflow.com/questions/6822985/django-foreignkey-model-filter-in-admin-area

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!