Поле доступа Django для нескольких моделей - PullRequest
2 голосов
/ 03 апреля 2012

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

class Attempt(models.Model, object):
    '''Creates an Attempt Entity which is a subclass of models.Model class'''
    attemptID_f = models.AutoField(primary_key=True)
    questionID_f = models.ForeignKey(Question, verbose_name="Question", null=False)
    userID_f = models.ForeignKey(User, verbose_name="User ID", null=False)
    solution_f = models.TextField("Solution uploaded by the User", null=False)
    errorReportID_f = models.ForeignKey(ErrorReport,verbose_name="Error Report for the Solution", null=True)
    status_f = models.BooleanField("Status of attempt - true = right, false = wrong", blank=True, default=False)
    timeOfSubmission_f = models.DateTimeField("Time of Submission", null=False)
    compilerVersion_f = models.ForeignKey(CompilerVersion, verbose_name = "Compiler version of the Attempt",null=False)

class Question(models.Model, object):
    '''Creates the entity question 
    which is a subclass of models.Model'''
    questionID_f = models.AutoField(primary_key=True)
    questionText_f = models.TextField("Problem Statement", null=False)
    questionTitle_f = models.CharField("Problem Title", max_length = 50, null = False) 
    level_f = models.ForeignKey(Level, verbose_name="Question Level", null=False)
    type_f = models.ForeignKey(Type, verbose_name="Type of Question", null=False)
    timeLimit_f = models.FloatField("Time Limit for Question",null=False)

class Type(models.Model):
    '''Creates the entity Type which is a subclass of models.Model class'''
    typeID_f = models.AutoField(primary_key=True)
    typeName_f = models.CharField("Type Name" , max_length = 30 , null = False)

typesm = Attempt.objects.filter(userID_f = request.user).values('attempt__questionID_f__type_f__typeID_f')

Является ли attempt__questionID_f__type_f__typeID_f верным аргументом, если я хочу сослаться на поле typeID_f типа MODEL, на которое ссылается type_f поле модели вопроса, на которое ссылается questionID_f поле модели попытки?

Любая помощь будет оценена.

Спасибо,

Панкадж.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Должно быть:

typesm = Attempt.objects.filter(userID_f = request.user).values('questionID_f__type_f__typeID_f')

Я не уверен, почему вы ставите префикс attempt__ там, когда запрашиваете модель Attempt.

См .: Поиски, которые охватывают отношения

0 голосов
/ 03 апреля 2012

Я думаю, что если вы используете фильтр, то что-то похожее на то, что вы написали, должно нормально работать

Attempt.objects.filter(questionID_f__type_f__typeID_f=42)

Чтобы найти все Attempt объекты с типом 42.

Если у вас естьэкземпляр попытки attempt затем вы хотите написать

if attempt.questionID_f.type_f.typeID_f == 42:
    print "Answer found!"

Некоторые точки стиля:

  • django создает AutoField с именем id по умолчанию
  • нет необходимости наследовать от object
  • вау, эти _f безобразны!Вы можете переименовать имя столбца в БД, если хотите, с опцией db_column , если у вас есть какой-то стиль SQL, который вписывается в
  • , вам не нужно произносить which is a subclass of models.Model в вашей помощи - там написаноименно то, что в коде и во всех системах документации Python понимают, что
...