У меня есть модель, имеющая много-много полей, как показано ниже. Я использую pytest для написания модульных тестов для него.
models.py
class CustomerMaster(models.Model):
customer_key = models.IntegerField(db_column='CUSTOMER_KEY', primary_key=True) # Field name made lowercase.
first_name = models.TextField(db_column='FIRST_NAME', blank=True, null=True) # Field name made lowercase.
last_name = models.TextField(db_column='LAST_NAME', blank=True, null=True) # Field name made lowercase.
email = models.CharField(db_column='EMAIL', max_length=255, blank=True, null=True) # Field name made lowercase.
gender = models.TextField(db_column='GENDER', blank=True, null=True) # Field name made lowercase.
dob = models.DateField(db_column='DOB', blank=True, null=True) # Field name made lowercase.
phone = models.CharField(db_column='PHONE', max_length=255, blank=True, null=True) # Field name made lowercase.
address = models.TextField(db_column='ADDRESS', blank=True, null=True) # Field name made lowercase.
...
class Meta:
managed = False
db_table = 'customer_master'
def __str__(self):
return self.first_name + self.last_name
class Segment(models.Model):
name = models.CharField(max_length=100)
folder = models.CharField(max_length=100)
selection = JSONField()
createdAt = models.DateTimeField(null=True)
updatedAt = models.DateTimeField(null=True)
createdBy = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
contact = models.ManyToManyField(CustomerMaster)
def __str__(self):
return self.name
Мне нужно проверить, может ли только авторизованный пользователь получить доступ к представлению. Для этого я использую декоратор @login_required, предоставляемый самой django. Для создания фиктивного пользователя я использую следующее приспособление:
conftest.py
import uuid
import pytest
@pytest.fixture
def test_password():
return 'strong-test-pass'
@pytest.fixture
def create_user(db, django_user_model, test_password):
def make_user(**kwargs):
kwargs['password'] = test_password
if 'username' not in kwargs:
kwargs['username'] = str(uuid.uuid4())
return django_user_model.objects.create_user(**kwargs)
return make_user
@pytest.fixture
def auto_login_user(db, client, create_user, test_password):
def make_auto_login(user=None):
if user is None:
user = create_user()
client.login(username=user.username, password=test_password)
return client, user
return make_auto_login
мой тестовый пример:
@pytest.mark.django_db
def test_status(self, auto_login_user):
client, user = auto_login_user()
url = reverse("overview", kwargs={"pk": 1})
response = client.get(url)
assert response.status_code == 200
Но во время выполнения этого тестового примера pytest выдает мне следующую ошибку:
django.db.utils.OperationalError: (1824, "Failed to open the referenced table 'customer_master'")
Когда я проверял свою базу данных, база данных test_img частично создается с таблицей сегментов, но не customer_master. Он выдает ошибку при создании сквозной таблицы связи между многими (например, analytics_segment_contact) между сегментом и customer_master.
Любая помощь будет оценена. Заранее спасибо!