2012-01-19 47 views
5

Tôi có một vài kiểu máy có tất cả chức năng chung. Mỗi Mô hình là một loại vật thể được lưu trữ để chia sẻ những thứ như stock và cũng chia sẻ một số thứ như sự kiện cảnh báo cổ phiếu thấp (gửi email).Django: Ghi đè nhãn trường hoặc help_text ở mô hình con

Thay vì sao chép mã, tôi đã viết Mô hình trừu tượng và được kế thừa từ nó.

class LowStockModel(models.Model): 
    stock = stock = models.IntegerField() 
    out_of_stock_behaviour = models.CharField(max_length=20, choices=[...]) 

    class Meta: 
     abstract = True 

    def save(self, *args, **kwargs): 
     super(self.__class__, self).save(*args, **kwargs) 
     if self.stock <= 0: 
      #... 

Vấn đề của tôi là tôi cần phải thay đổi nhãn hoặc thêm khác nhau help_text đến lĩnh vực stock trong các lớp con tôi đẻ trứng. Điều này rất quan trọng vì khách hàng (và nhân viên của họ) cần hướng dẫn về các đơn vị. Tôi đã thử munging xung quanh trong các con __init__ nhưng tôi không nhận được bất cứ nơi nào.

tl; dr Làm cách nào bạn có thể thay đổi nhãn trên một trường từ mô hình con?

+0

Đừng làm điều này: 'super (self .__ class__, self)' Bạn có thể dễ dàng nhận được đệ quy vô hạn. – DrTyrsa

+3

Nó sẽ không đẹp, nhưng: http://stackoverflow.com/a/928774/16361 – AdamKG

+0

Cảm ơn @AdamKG thật hoàn hảo. – Oli

Trả lời

1

Khi thừa kế được làm từ một lớp trừu tượng, trong Django bạn có thể muốn sử dụng:

CustomClass._meta.get_field('yourfield').verbose_name = 'Your custom text'

lớp của bạn nên được như:

class AncestorClass(models.Model): 
    stock = models.CharField(max_length=50, verbose_name='AncestorStockName') 
    # etc ... 

Và bây giờ chúng ta nên tùy chỉnh con lớp học như thế này:

class ChildClass(AncestorClass): 
    stock = models.CharField... # Customize your stock field 

ChildClass._meta.get_field('stock').verbose_name = 'CustomVerboseStock' 
0

Điều này sẽ hoạt động:

class MyForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['stock '].label = "any label" 
Các vấn đề liên quan