2017-09-25 17 views
1
TypeError: start_end_period() got an unexpected keyword argument 'months' 

このエラーは苦しいです。 relativedelta.relativedelta(test)を実行することができるので、何かが直接months=1の​​3210になる可能性がありますので、私はを直接引数としてstart_end_period()メソッドに渡したいと思います。TypeError:start_end_period()に予期しないキーワード引数 'months'があります

start_date = CustomerProfile.objects.filter(user__date_joined__gte=entry_date_production).first().user.date_joined 
def start_end_period(period): 
       start = start_date - relativedelta.relativedelta(period) 
       end = start + relativedelta.relativedelta(period - 1) 
       return start, end 

relativedelta(7)relativedelta(months=1)の両方が良好であるので、それは、単一の引数やキーワード引数で動作するように、どのように私はこの方法を適応させることができますか?

答えて

1

まず、期間がかかる機能に月または年を渡すことはできませんが、日数、月数、または年数はかかりません。あなたはそれを取ることを望むものとして機能を宣言してください。

次に、それらをrelativedeltaコンストラクタに渡す必要があります。ここで

from dateutil.relativedelta import relativedelta 

def start_end_period(start_date, days=0, months=0, years=0): 
    period = relativedelta(days=days, months=months, years=years) 
    start = start_date - period 
    end = start + period + relativedelta(days=1) 
    return start, end 

import datetime 
start_date = datetime.date(year=2017, month=3, day=1) 
print (start_date) 

print (start_end_period(start_date, days=7)) 
print (start_end_period(start_date, months=2)) 
print (start_end_period(start_date, years=1)) 

最も簡単な方法だが、あなたの代わりに自動的に関数に与えられたものは何でもに渡すことによってrelativedeltaのオプションのすべてをサポートする** kwargsからは、使用する必要があります。

def start_end_period(start_date, **kwargs): 
    period = relativedelta(**kwargs) 
+0

dateutil.relativedeltaは確立されたダウンロード可能なモジュールなので、可変サイズの日付を追加するルールに満足していると思います。 diffとして月を使用するというコンセプトにはリスクがありますが、実際のルールでは日付関連のコードを決して実行することはなく、dateutilを使用することは少なくともそれを満たします。 –

関連する問題