Làm cách nào tôi có thể đặt giá trị mặc định cho trường được lấy từ các đối tượng hiện có của mô hình?Django: giá trị mặc định của trường từ trường hợp của mô hình tự
tôi đã cố gắng những điều này và nó đã không làm việc:
1)
class ModelA(models.Model):
fieldA = models.CharField(default=self.get_previous())
def get_previous(self):
return ModelA.objects.all()[0].fieldA
NameError: name 'self' is not defined
2)
class ModelA(models.Model):
fieldA = models.CharField(default=ModelA.get_previous())
@staticmethod
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: name 'ModelA' is not defined
3)
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: global name 'get_previous' is not defined
4)
def get_previous():
return ModelA.objects.all()[0].fieldA
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
NameError: global name 'ModelA' is not defined
tôi thì rõ ràng lý do tại sao 3) và 4) sẽ không làm việc. Tôi có thể hình dung lý do tại sao 1) sẽ không hoạt động - có vẻ như tính thích hợp của lớp không thể tham chiếu đến ví dụ (nghĩa là bản thân). Tôi có thể hình dung lý do tại sao 2) sẽ không hoạt động - dường như không có tham chiếu đến ModelA cho đến khi thông dịch viên đi toàn bộ lớp học.
Vậy tôi nên tiếp cận điều này như thế nào?
Điểm tốt! Trong trường hợp của tôi mặc dù tôi có nhiều lĩnh vực để có được giá trị mặc định vì vậy tôi sẽ cần chức năng riêng biệt cho mỗi một. (Nhưng tôi sẽ xem xét sử dụng lambda để khái quát hóa điều này, một cái gì đó như 'lambda: get_default ('field_name')') – grucha
Tương đương, bạn sẽ có thể làm 'default = lambda: ModelA.objects.all() [0]. fieldA'. –
Lưu ý rằng việc sử dụng hàm lambda mặc định sẽ gây rối với việc di chuyển vì các hàm lambda không thể được tuần tự hóa. – Ironbeard