Skip to content

Instantly share code, notes, and snippets.

@joshuadavidthomas
Last active February 16, 2024 17:11
Show Gist options
  • Save joshuadavidthomas/024d6e91585ab625588cdf1492c6f83e to your computer and use it in GitHub Desktop.
Save joshuadavidthomas/024d6e91585ab625588cdf1492c6f83e to your computer and use it in GitHub Desktop.
import pytest
from django.db import models
from django_q.models import Schedule
from model_bakery import baker
class Task(models.Model):
q_schedule = models.OneToOneField(
"django_q.Schedule",
on_delete=models.SET_NULL,
null=True,
related_name="registered_task",
)
@pytest.mark.xfail(reason="setting the related field on the other model does not work")
def test_related_field_on_other_model(self):
task = baker.make("test_models.Task")
assert task.q_schedule is None
schedule = baker.make("django_q.Schedule", registered_task=task)
assert Schedule.objects.all().count() == 1
assert Schedule.objects.first() == schedule
# this works
assert task.q_schedule == schedule
# this doesn't?
assert Task.objects.first().q_schedule == schedule
# this works
assert schedule.registered_task == task
# this doesn't?
assert Schedule.objects.first().registered_task == task
# neither of these work
assert Schedule.objects.get(registered_task=task) == schedule
assert Schedule.objects.filter(registered_task__isnull=False).count() == 1
def test_related_field_on_our_model(self):
task = baker.make("test_models.Task")
assert task.q_schedule is None
schedule = baker.make("django_q.Schedule")
task.q_schedule = schedule
task.save()
assert Schedule.objects.all().count() == 1
assert Schedule.objects.first() == schedule
assert task.q_schedule == schedule
assert Task.objects.first().q_schedule == schedule
assert schedule.registered_task == task
assert Schedule.objects.first().registered_task == task
assert Schedule.objects.get(registered_task=task) == schedule
assert Schedule.objects.filter(registered_task__isnull=False).count() == 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment