Django模型中的任一/或字段

时间:2012-08-18 20:11:24

标签: django django-models optional-parameters

我正在构建一个有两个字段的django模型,只需要其中一个字段。

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') 

我希望该条目仅在提供“link”字段或提供“uploaded_file”字段或两者都有效时才有效。我不能使这两个参数都是可选的,因为它们都可以留空。有什么建议?

3 个答案:

答案 0 :(得分:3)

这不是您在模型定义中处理的内容。您可以在表单级别处理它,同时创建两个字段required=False,但检查表单的clean()方法,其中一个是提供的。

答案 1 :(得分:0)

您可以使用ModelForm并覆盖其clean方法来获取所需的行为。如果要使用管理员,可以使用ModelAdmin

添加自定义行为

答案 2 :(得分:0)

您可以覆盖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.'))