0

2 つのフィールドを持つ django モデルを構築していましたが、そのうちの 1 つだけが必要です。

class course_data(models.Model):
    link = models.CharField(max_length = 500, null = True, blank = True)
    uploaded_file = models.FileField(upload_to='course_files', null = True, blank = True)
    name = models.CharField(max_length = 200, null = True, blank = True)
    description = models.TextField(null = True, blank = True)    
    applies_to = models.ManyToManyField('course') 

「リンク」フィールドが提供されている場合、または「uploaded_file」フィールドが提供されている場合、またはその両方の場合にのみ、エントリが有効になるようにします。両方とも空白のままにすることができるため、両方のパラメーターをオプションにすることはできません。助言がありますか?

4

3 に答える 3

3

これは、モデル定義で扱うものではありません。required=False両方のフィールドを作成し、フォームのclean()メソッドでそれらのいずれかが提供されていることを確認することにより、フォームレベルで処理します。

于 2012-08-18T20:33:04.433 に答える
1

メソッドをオーバーライドできますclean

class course_data(models.Model):
    link = models.CharField(max_length = 500, null = True, blank = True)
    uploaded_file = models.FileField(upload_to='course_files', null = True, blank = True)
    name = models.CharField(max_length = 200, null = True, blank = True)
    description = models.TextField(null = True, blank = True)    
    applies_to = models.ManyToManyField('course')

    def clean(self):
        if self.link == None and self.uploaded_file is None:
            raise ValidationError(_('Fields uploaded_file and link required.'))
于 2016-08-12T10:25:37.997 に答える
0

ModelFormを使用し、そのcleanメソッドをオーバーライドして、必要な動作を得ることができます。管理者を使用する場合は、ModelAdminを使用してカスタム動作を追加できます

于 2012-08-18T20:34:55.507 に答える