0

我正在构建一个具有两个字段的 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') 

我希望该条目仅在提供“链接”字段或提供“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 回答