2016-03-15 37 views
2

我有用戶在合同結束日期+ 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() 
    ... 

我需要使用哪些過濾器選項來完成這項工作?非常感謝幫助!

回答

2

您可以使用timedelta。這將刪除endtime已超過2個月前的所有用戶。作爲AccessTimes有一個ForeignKey到User你也可以選擇使用reverse relationships

import datetime 
# date 2 months ago 
delete_date = datetime.date.today() - datetime.timedelta(2*365/12) 
User.objects.filter(accesstimes__endtime__lte=delete_date).delete() 
+0

對不起,遲到的迴應!我收到以下錯誤:FieldError:無法將關鍵字'endtime'解析爲字段。選擇是:comment,created,created_by,created_by_id,modified,modified_by,modified_by_id,username'。 endtime字段位於AccessTime模型中。我們以某種方式需要訪問它。這可能嗎? –

+0

對不起,錯過了涉及的外鍵。我更新了我的答案。您可以使用反向關係:https://docs.djangoproject.com/es/1.9/topics/db/queries/#lookups-that-span-relationships – ilse2005

-1

在AccessTimes類作爲ForeignKey的用戶來使用類名爲username字段可以一會兒混亂。用戶名字段由用戶類聲明,因此根據與該字段相關的class_name命名字段的可讀性更高。

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) 

希望它有幫助。如果不是,請告訴我。 PLUR。

相關問題