Фильтр модели ForeignKey в админке? - PullRequest
1 голос
/ 26 июля 2011

Привет, мне нужен действительно очень очень простой пример. Сначала мои модели:

#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

ОК. Давайте посмотрим мою модель 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 Ответ

1 голос
/ 26 июля 2011

Попробуйте метод повторного определения Юникод .

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 вам нужно сделать этот объект итеративным (города не уникальны), а затем вы можете выбрать все из модели «Студенты» для установки в поле.

...