Джанго админ 'это' отношения - PullRequest
0 голосов
/ 10 сентября 2011

У меня большой опыт работы с Django, но я очень плохо знаком с приложением для администраторов (мы обычно встраиваем все в страницу в соответствии с требованиями проекта).

Но сейчас я работаю над проектом, который требует некоторой админской работы, и я застрял на одной части.

скажем, у меня есть база данных моделей - человек, студент, факультет

И факультет, и студент - это «человек» (так сказать, они наследуют эти атрибуты). Как я могу показать это в представлении администратора?

Так что, когда кто-то щелкает, чтобы добавить ученика, он заполняет только атрибуты ученика, но также и атрибуты, необходимые для модели Person на той же странице. Это возможно?

Вот модели, есть факультет, но он похож на студента

class Person(models.Model):
    last_name = models.CharField(max_length=50)
    first_name = models.CharField(max_length=50)
    mi = models.CharField(max_length=50)
    phone = models.CharField(max_length=20)
    cell = models.CharField(max_length=20)



class Student(models.Model):
    year = models.CharField(max_length=10)
    stud_id = models.IntegerField()
    person = models.ForeignKey(Person)
    #many to many

Любые идеи или дополнительные вопросы будут великолепны!

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

InlineModelAdmin ваш ответ!проверить это!

Вот код, который вам нужен:

class StudentInline(admin.TabularInline):
    model = Student

class PersonAdmin(admin.ModelAdmin):
    inlines = [
        StudentInline,
    ]

admin.site.register(Person,PersonAdmin)
1 голос
/ 10 сентября 2011

Другой способ - использовать наследование модели Django следующим образом:

class Person(models.Model):
    last_name = models.CharField(max_length=50)
    first_name = models.CharField(max_length=50)
    mi = models.CharField(max_length=50)
    phone = models.CharField(max_length=20)
    cell = models.CharField(max_length=20)

class Student(Person):
    year = models.CharField(max_length=10)
    stud_id = models.IntegerField()

Таким образом, на странице администратора ученика вы получите все поля от Student И от Person без Inlines. Также Django будет автоматически обрабатывать ForeignKey между двумя столами.

Документы по наследованию модели .

...