Django 删除多个具有结束日期的用户

Django 删除多个具有结束日期的用户,django,django-models,Django,Django Models,我有一些用户,当他们达到合同结束日期+2个月时将被删除。我的意思是,如果一个用户拥有2016/03/15的结束日期,我想在该日期为2016/05/15或更多的时候删除他。我考虑过使用过滤器选项,但我不确定应该为过滤器设置什么条件 我有一个模范用户 class User(models.Model): username = models.CharField(unique=True, primary_key=True) ... 还有一个模型,我们把东西存储起来,比如创建的,修改的。。

我有一些用户,当他们达到合同结束日期+2个月时将被删除。我的意思是,如果一个用户拥有2016/03/15的结束日期,我想在该日期为2016/05/15或更多的时候删除他。我考虑过使用过滤器选项,但我不确定应该为过滤器设置什么条件

我有一个模范用户

class User(models.Model):
    username = models.CharField(unique=True, primary_key=True)
    ...
还有一个模型,我们把东西存储起来,比如创建的,修改的。。。。结束日期呢

class AccessTimes(models.Model):
    username = models.ForeignKey(User, db_column='username')
    ...
    endtime = models.DateTimeField(null=True, blank=True)
    ...
这是我目前的看法:

def delete_multiple_users(request):
    """
    Deletes the users in a certain timespan and revokes all grants
    """
    users = User.objects.filter(???).delete()
    ...

我需要使用哪些过滤器选项来实现此功能?非常感谢您的帮助

您可以为此使用
timedelta
。这将删除
endtime
已超过2个月的所有用户。由于
AccessTimes
具有指向
User
的外键,因此您还必须使用:


在AccessTimes类中使用名为username的字段作为用户类的外键可能会让人困惑一段时间。用户名字段是由用户类声明的,所以根据与此字段相关的类名称命名字段更容易阅读

class User(models.Model):
    username = models.CharField(...)
    # ...

class AccessTimes(models.Model):
    user = models.ForeignKey(User)
    # ...
通过ForeignKey将AccessTimes类的用户字段和用户类相关联也可能会令人困惑。用户可能不会多次访问。完全退出AccessTimes类并使用UserProfile类并分配适当的参数不是一个坏主意

class UserProfile(models.Model):
    endtime = models.DateTimeField()
    # ...
将UserProfile类与User类相关联似乎是显而易见的

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    endtime = models.DateTimeField()
    # ...
由于使用了UserProfile类,过滤用户变得简单多了

UserProfile.objects.filter(...)
过滤结束时间超过两个月的用户变得直观

today = datetime.date.today()
two_months_ago = today - timedelta(days = 60)
users_to_delete = UserProfile.objects.filter(endtime__lt = two_months_ago)

希望能有帮助。如果没有,请告诉我。普鲁尔

很抱歉反应太晚!我收到以下错误:
FieldError:无法将关键字“endtime”解析到字段中。选项包括:注释、创建、创建人、创建人id、修改、修改人、修改人id、用户名
。endtime字段位于AccessTime模型中。我们需要找到它。这有可能吗?对不起,错过了,这里面有一把外国钥匙。我更新了我的答案。您可以使用反向关系:
today = datetime.date.today()
two_months_ago = today - timedelta(days = 60)
users_to_delete = UserProfile.objects.filter(endtime__lt = two_months_ago)