【问题标题】:Django - form validation for overlapping date rangesDjango - 重叠日期范围的表单验证
【发布时间】:2014-02-13 20:10:03
【问题描述】:

想象一下这个模型

class Session(models.Model):
    user = models.ForeignKey(User)
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()

要添加/更新会话,我使用这个 modelForm

class SessionForm(forms.ModelForm):
    class Meta:
        model = Session
        fields = ('start_time', 'end_time',)

由于我需要防止同一个usersessions 重叠,所以我把这个表格清理干净了

def clean(self):
    cleaned_data = super(SessionForm, self).clean()
    start = cleaned_data.get('start_time')
    end = cleaned_data.get('end_time')
    conflicts = Session.objects.filter(
            start_time__lte=end,
            end_time__gte=start,
        )
    if any(conflicts):
        raise forms.ValidationError(_("%i conflicts found" % conflicts.count()))
    return cleaned_data

但是当我在save() 之后添加user

if form.is_valid():
    session = form.save(False)
    session.user = request.user
    session.save()

如何将其包含在冲突检查中?

换句话说,如何将user 作为参数传递给clean()

【问题讨论】:

    标签: python django django-forms django-validation


    【解决方案1】:

    有一个替代方法可以覆盖__init__ 方法。在创建表单时传递带有user 集的session 实例。

    session = Session(user=request.user)
    form = SessionForm(data=request.POST, instance=session)
    if form.is_valid():
        form.save()
    

    然后在您的 clean 方法中,您可以以 self.instance.user 的身份访问用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2013-10-06
      • 1970-01-01
      • 2016-04-26
      • 2018-03-03
      相关资源
      最近更新 更多