2017-08-22 14 views
2

は、私は次のモデルを持っていると言う:ここDjangoのモデル:依存フィールド

class Book(models.Model): 
    due_back = models.DateField(null=True, blank=True) 

    AVAILABILITY = (
     ('a', 'Available'), 
     ('o', 'On loan'), 
     ('n', 'Not available'), 
     ('r', 'Reserved'), 
    ) 

    status = models.CharField(choices=AVAILABILITY, blank=True) 

私の問題は、二つのフィールドdue_backstatusがお互いに依存していることです。たとえば、書籍が「ローン」の場合、due_back日付を持つことは意味がありません。

本書の目的は、書籍が「貸出中」である場合に限り、due_back日付のみを持つことができることです。しかし、これを行うには、この種の問題のための "ベストプラクティス"がありますか?

答えて

-1

Aliquisの答えに追加する重要なこと。 Model.clean()メソッドを呼び出すには、save()メソッドをオーバーライドする必要があります。

class ModelName(models.Model): 
    ... 
    def save(self, *args, **kwargs): 
     self.clean() 
     return super(ModelName, self).save(*args, **kwargs) 
0

これはDjango Validatorsを使用することで実現できます。

from django.core.exceptions import ValidationError 

class Book(models.Model): 

    ... 
    def clean(self): 
     if self.status == 'o' and self.due_back is not None: 
      raise ValidationError('Error Book on Loan have due back date How !!!') 
関連する問題