首先,您可以爲此使用模型管理器。應該看起來類似於以下內容。
(這不是測試,你可能要與查詢集亂):
managers.py
from django.db import models
class Visited(models.Manager):
def on_day(self, user, date):
qs = self.model.objects.filter(user=user, visited_at=date)
return qs
models.py
from django.db import models
from .managers import Visited
class Visits(models.Model):
user = models.ForeignKey(User)
visited_at = models.DateTimeField()
objects = models.Manager()
visited = Visited()
def __unicode__(self):
return "{}-{}".format(self.user, self.visited_at)
簡單給它提供它需要返回的信息user
和date
e所需的User
集。
至於測試,希望有人能寫的東西在適當的文檔,因爲有很多我想了解它,但是這通常是我怎麼樣去了解它:
tests.py
import datetime
from django.test import TestCase
class TestData(TestCase):
yesterday = datetime.date.today() - datetime.timedelta(days=1)
@classmethod
def setUpTestData(cls):
cls.User1 = User.objects.create(
name="Anon1"
)
cls.User2 = User.objects.create(
name="Anon2"
)
cls.Visit1 = Visits.objects.create(
user=cls.user1,
visited_at=self.yesterday,
)
cls.Visit2 = Visits.objects.create(
user=cls.user2,
visited_at=datetime.date(2016,7,28),
)
cls.Visit3 = Visits.objects.create(
user=cls.user2,
visited_at=datetime.date(2016,8,1),
)
class SalesRecordTest(TestData):
def test_varieties_sold(self):
self.assertQuerysetEqual(Visits.visited.on_day(self.yesterday, self.user), ["<User: Anon1>"])
self.assertNotIn("Anon2", str(Visits.visited.on_day(self.yesterday, self.user)))
國旗--keepdb
你的測試,讓他們迅速。每次只使用--keepdb
我都沒有發現任何缺點,因爲它似乎在需要時更新數據庫。
希望這足以讓你開始。祝你好運,快樂的測試!