как получить объекты, которые не имеют определенного атрибута в хранилище данных - PullRequest
0 голосов
/ 22 августа 2011

Я пытаюсь сделать систему оценки Это мой класс

class Goal(db.Expando):
  GID = db.IntegerProperty(required=True)
  description = db.TextProperty(required=True)
  time = db.FloatProperty(required=True)
  weight = db.IntegerProperty(required=True)
  Emp = db.UserProperty(auto_current_user=True)
  Status = db.BooleanProperty(default=False)

Следующие вещи даны работником,

class SubmitGoal(webapp.RequestHandler):
    def post(self):
      dtw = simplejson.loads(self.request.body)
      try:
        maxid = Goal.all().order("-GID").get().GID + 1
      except:
        maxid = 1
      try:
        g = Goal(GID=maxid, description=dtw[0], time=float(dtw[1]), weight=int(dtw[2]))
        g.put()
        self.response.out.write(simplejson.dumps("Submitted"))
      except:
        self.response.out.write(simplejson.dumps("Error"))

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

idsta = simplejson.loads(self.request.body)
    try:
        g = db.Query(Goal).filter("GID =", int(idsta[0])).get()
        if g:
            if idsta[1]:
                g.Status=True
                try:
                    del g.Comments
                except:
                    None
            else:
                g.Status=False
                g.Comments=idsta[2]
            db.put(g)
            self.response.out.write(simplejson.dumps("Submitted"))
    except:
        self.response.out.write(simplejson.dumps("Error"))

Теперь вот где я застрял ... "filter ('status =', True)" .. это возвращает все объекты, которые имеют статус true .. означает, что они утверждены .. я хочу, чтобы эти объекты были одобрено И еще не оценено сотрудником ..

def get(self):
    t = []
    for g in Goal.all().filter("Status = ",True):
        t.append([g.GID, g.description, g.time, g.weight, g.Emp])
    self.response.out.write(simplejson.dumps(t))
def post(self):
    idasm = simplejson.loads(self.request.body)
    try:
        g = db.Query(Goal).filter("GID =", int(idasm[0])).get()
        if g:
            g.AsmEmp=idasm[1]
            db.put(g)
            self.response.out.write(simplejson.dumps("Submitted"))
    except:
        self.response.out.write(simplejson.dumps("Error"))

Как я должен это сделать? поскольку я знаю, что если я добавлю еще один фильтр, такой как «filter ('AsmEmp =', not None)», он вернет только те объекты, которые имеют атрибут AsmEmp, что мне нужно, наоборот.

Ответы [ 3 ]

4 голосов
/ 22 августа 2011

Вы явно не можете этого сделать.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1008* * *.is_assessed, который по умолчанию равен False, и запросить его.

0 голосов
/ 23 августа 2011

Для записей не хватает атрибута в хранилище данных, просто для него установлено значение Нет.Вы можете запросить эти записи с помощью Goal.all().filter('status =', True).filter('AsmEmp =', None).

Несколько случайных предложений о вашем коде:

  1. 'Status' - довольно неинтуитивное имя для логического значения.
  2. Как правило, это хороший стиль Python - начинать свойства и атрибуты со строчной буквы.
  3. Вы не должны итерировать запрос напрямую.Эта выборка приводит к пакетам, и она гораздо менее эффективна, чем явная выборка.Вместо этого извлеките количество нужных вам результатов с помощью .fetch(n).
  4. Попытка / исключение без указания класса исключения и никаких действий, предпринимаемых при возникновении исключения, является очень плохой идеей и может маскировать самые разныепроблемы.

Редактировать: я не заметил, что вы использовали Expando - в этом случае @ ответ Даниэля является правильным.Похоже, что здесь нет веских причин использовать Expando.Добавление свойства в модель (и обновление существующих сущностей) будет самым простым решением здесь.

0 голосов
/ 22 августа 2011

не могли бы вы просто добавить другое поле для когда employee_assessed = db.user ... и заполнить его только в тот момент, когда оно оценивается?

...