Khi tôi cố gắng chạy manage.py makemigrations
trên Django 1,7, tôi nhận được lỗi sau:classmethods Serializing trong Django 1,7
ValueError: Cannot serialize: <bound method ModelBase.get_default of <class 'printapp.models.JobConfiguration'>>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing
Vì vậy, nó trông giống như có một vấn đề với phương pháp get_default
đó là xác định trên JobConfiguration
, có nghĩa là được lặp lại bên dưới:
@classmethod
def get_default(cls):
result = cls()
result.save()
return result
Sau link that was provided in the error message, có vẻ như việc tuần tự hóa "tham chiếu lớp" là một tính năng được hỗ trợ.
Có phải là "tham chiếu lớp học" giống như @classmethod
không?
Làm cách nào để đặt "tham chiếu lớp" trong "phạm vi cấp cao nhất của mô-đun"?
Tại sao các phương pháp phải được theo dõi bằng cách di chuyển? Tôi đã được giả định rằng di chuyển cho các lược đồ cơ sở dữ liệu, mà chỉ theo dõi các loại dữ liệu được lưu trữ, không phải là loại phương pháp được sử dụng bởi một lớp.
Điều thú vị cần lưu ý là: thay đổi định nghĩa get_default
thành phương pháp tĩnh như được lặp lại dưới đây giải quyết được vấn đề, nhưng với chi phí phải mã hóa cứng tên lớp JobConfiguration
.
@staticmethod
def get_default():
result = JobConfiguration()
result.save()
return result
(Một số bối cảnh:. Phương pháp này đang được tham chiếu như JobConfiguration.get_default
từ bên trong một models.OneToOneField(JobConfiguration, default=JobConfiguration.get_default)
với hiệu ứng của việc tạo ra một JobConfiguration mới cho mỗi một trong những lĩnh vực tạo ra)
Chỉ cần quan tâm, điều này cho bạn biết gì hơn 'JobConfiguration.objects.create()'? Nó vẫn là một lệnh, chỉ cần gõ nhiều hơn. –
Huh, tôi đã không nhận ra rằng phương pháp đó đã có sẵn. Tôi có thể sẽ thay đổi nó trong mã của tôi, nhưng tôi vẫn còn quan tâm đến việc biết tại sao mã là không như vậy. – Z1MM32M4N