Als Erstes könnten Sie einen Modellmanager dafür verwenden. Sollte etwas ähnlich dem Folgenden aussehen.
(Dies ist nicht getestet, können Sie mit dem querysets zu verwirren haben):
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)
einfach füttern Sie es die user
und date
Informationen, die es th zurückgeben muss e gewünschte User
eingestellt.
Wie für die Prüfung, hoffentlich jemand etwas ordnungsgemäße in Dokumentation schreiben kann, denn es gibt viel ich darüber erfahren möchte, aber dies ist in der Regel, wie ich über sie gehen mag:
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)))
Flagge Ihre Tests mit --keepdb
ihnen rasche zu halten. Ich habe keinen Nachteil gefunden, nur --keepdb
jedes Mal zu verwenden, da es scheint, die Datenbank zu aktualisieren, wann immer es erforderlich ist.
Hoffentlich ist dies genug, um loszulegen. Viel Glück und viel Spaß beim Testen!