Tôi có một mô hình mà tôi muốn chứa tên chủ thể và tên viết tắt của chúng (dữ liệu của anh ấy hơi ẩn danh và được theo dõi bằng tên viết tắt).
Ngay bây giờ, tôi đã viết
class Subject(models.Model):
name = models.CharField("Name", max_length=30)
def subject_initials(self):
return ''.join(map(lambda x: '' if len(x)==0 else x[0],
self.name.split(' ')))
# Next line is what I want to do (or something equivalent), but doesn't work with
# NameError: name 'self' is not defined
subject_init = models.CharField("Subject Initials", max_length=5, default=self.subject_initials)
Như được chỉ ra ở dòng cuối cùng, tôi muốn có thể có các chữ cái đầu thực sự được lưu trữ trong cơ sở dữ liệu dưới dạng một trường (độc lập với tên), nhưng nó được khởi tạo với giá trị mặc định dựa trên trường tên. Tuy nhiên, tôi đang gặp vấn đề là các mô hình django dường như không có 'bản thân'.
Nếu tôi thay đổi dòng thành subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials)
, tôi có thể thực hiện syncdb, nhưng không thể tạo chủ đề mới.
Điều này có khả thi trong Django không, việc có một hàm có thể gọi cung cấp giá trị mặc định cho một số trường dựa trên giá trị của một trường khác?
(Đối với những người tò mò, lý do tôi muốn tách các chữ cái đầu trong cửa hàng của mình một cách riêng biệt là trong một số trường hợp hiếm hoi, những cái tên kỳ lạ có thể khác với những cái tôi đang theo dõi. Ví dụ: ai đó đã quyết định rằng Đối tượng 1 được đặt tên là tên viết tắt "John O'Mallory" là "JM" chứ không phải "JO" và muốn sửa, hãy chỉnh sửa nó với tư cách quản trị viên.)
super().save(*args, **kwargs)
(không cóSubject, self
đối số) như trong ví dụ trong tài liệu được tham chiếu.