Tôi đang sử dụng Django 1.5 và tôi đang cố gắng làm cho ứng dụng hoạt động với bất kỳ mô hình người dùng tùy chỉnh nào. Tôi đã thay đổi ứng dụng để sử dụng get_user_model
ở mọi nơi và bản thân ứng dụng hiện không hiển thị bất kỳ sự cố nào.Thử nghiệm với mô hình người dùng tùy chỉnh dưới dạng ForeignKey ở Django 1.5
Vấn đề là tôi muốn có thể thử nghiệm ứng dụng, nhưng tôi không thể tìm cách tạo các trường mô hình ForeignKey
để kiểm tra chính xác bằng cách sử dụng các mô hình người dùng tùy chỉnh. Khi tôi chạy test đính kèm dưới đây, tôi nhận được lỗi này:
ValueError: Cannot assign "<NewCustomUser: [email protected]>": "ModelWithForeign.user" must be a "User" instance.
Đây là tập Tôi đang sử dụng để thử nghiệm:
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.tests.custom_user import CustomUser, CustomUserManager
from django.db import models
from django.test import TestCase
from django.test.utils import override_settings
class NewCustomUser(CustomUser):
objects = CustomUserManager()
class Meta:
app_label = 'myapp'
class ModelWithForeign(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
@override_settings(
AUTH_USER_MODEL = 'myapp.NewCustomUser'
)
class MyTest(TestCase):
user_info = {
'email': '[email protected]',
'date_of_birth': '2013-03-12',
'password': 'password1'
}
def test_failing(self):
u = get_user_model()(**self.user_info)
m = ModelWithForeign(user=u)
m.save()
Tôi đang tham khảo các mô hình sử dụng trong đối số ForeignKey
danh sách như được mô tả here, nhưng sử dụng get_user_model
không thay đổi bất kỳ điều gì vì thuộc tính user
được đánh giá trước khi thay đổi cài đặt diễn ra. Có cách nào để làm cho ForeignKey này chơi tốt đẹp với thử nghiệm khi tôi đang sử dụng các mô hình người dùng tùy chỉnh?
Điều này không liên quan đến thực tế rằng đó là cài đặt trên toàn trang web và không phải là cài đặt dành riêng cho ứng dụng? Giải pháp của bạn dường như có ý nghĩa khá tốt! – benjaoming
@benjaoming nó thực sự là vì lược đồ không được xây dựng lại giữa các kiểm tra (và thực sự không nên), làm cho thuộc tính swappable vô dụng trong trường hợp này, vì nó định nghĩa bảng thực sự tồn tại. Bạn có thể trao đổi khá nhiều thứ khác và [tài liệu] (https://docs.djangoproject.com/en/dev/topics/testing/overview/#django.test.utils.override_settings) hiển thị một vài ví dụ về trang web cài đặt có thể bị ghi đè. – fcoelho