Подражая моделям Django?(Простая реализация - чего-то не хватает) - PullRequest
0 голосов
/ 01 октября 2011

Я пытаюсь эмулировать модели django:

В Django:

from django.contrib.auth.models import User
if User.objects.get(pk=1) == User.objects.get(username='root')
    print 'True'
else:
    print 'False'
# True is printed

Моя реализация:

 class MyUser:
      def __init__(self, id):
          self.id = id

 class User:
     class objects:
         @staticmethod
         def get(**kwargs):
             return MyUser(1)

if User.objects.get(pk=1) == User.objects.get(username='root')
    print 'True'
else:
    print 'False'
# False is printed

Как исправить мою реализацию, чтобы получить 'True'?

Как мне добиться того же эффекта?Какое изменение я должен сделать?

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

Проблема в том, что вы не определили __eq__ в своем классе, поэтому Python не знает, как их сравнить.Примерно так будет работать:

class MyUser(object):
    def __init__(self, id):
        self.id = id

    def __eq__(self, other):
        return self.id == other.id
0 голосов
/ 01 октября 2011

Это потому, что Model s в Django реализует метод __eq__:

def __eq__(self, other):
    return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val()

Вы можете реализовать аналогичный метод в своем классе MyUser для достижения аналогичного эффекта.

См. Также: документация по __eq__.

...