2015-10-27 2 views
1

Я разрабатываю приложение Django 1.8, в котором у меня есть концепция испытаний и оценщиков. У меня будет шесть экспертов, которые будут использовать администратора Django для входа в систему и проведения оценок.Django: Включая стандартную таблицу пользователя в качестве внешнего ключа в моих моделях?

Я хочу, чтобы в каждом испытании было два прилагаемых оценщика. Как я могу использовать модель Django User в models.py, чтобы гарантировать, что оценщики являются Пользователями, и может управляться с использованием полной мощности Пользователей?

Сейчас у меня есть это, в которых оценщики не пользователи, а просто обычные модели:

class Assessor(models.Model): 
    name = models.CharField(max_length=200) 

class Trial(models.Model): 
    title = models.CharField(max_length=800) 
    publication_date = models.DateField() 
    first_assessor = models.ForeignKey(assessor) 
    second_assessor = models.ForeignKey(assessor) 

Я хочу оценщики быть пользователями, так что я могу управлять их обычным образом через таблицы пользователя, но я не знаю, как это сделать.

Возможно, им не нужны никакие настраиваемые поля поверх стандартных атрибутов пользователя.

(NB: Я не нуждаюсь в полной на управление разрешениями в админке, это нормально для любого оценщика, чтобы иметь возможность редактировать испытание.)

UPDATE: Извинения, это довольно трудно объяснить! Меня вообще не интересует интерфейс Django, только администратор. Я хочу, чтобы пользователь мог войти в админ, увидеть все испытания, на которых они являются первичными оценщиками, и редактировать эти испытания. Я не уверен, что лучше всего сделать это с помощью модели User или нет.

ответ

0

Вместо двух внешних ключей добавьте отношение manytomany от Trail к пользователю. Позже, если вы хотите, вы можете добавить еще нескольких оценщиков к тропе.

Вы можете сделать так:

from django.contrib.auth.models import User 
class Trial(models.Model): 
    title = models.CharField(max_length=800) 
    publication_date = models.DateField() 
    assessors = models.ManyToManyField(User,related_name="trials") 

Вы можете добавить оценщикам к суду как:

trial = Trial.objects.get(id=give-trial-id) 
user = User.objects.get(id=give-assessor-id) 
trail.assessors.add(user) 

Вы можете получить более подробную информацию о manytomany here

Я только что видел ваш UPDATE , Любой, кто входит в систему администратора, будет иметь доступ ко всем объектам всех моделей. В вашем случае все оценщики, которые будут входить в админ, будут иметь доступ ко всем трекам независимо от того, назначены ли они или нет.

Если вы хотите, чтобы фильтр django admin регистрировался пользователем, тогда обратитесь к this question

Смежные вопросы