[英]Passing a variable from views.py to models.py django
我對編程還是很陌生。
我的問題是我有 2 個模型,一個用於銷售,一個用於代理。
現在要呈現每個代理和他們所做的銷售(具有不同的屬性),我需要在我的銷售 model 下編寫 model 方法,以允許我在模板中調用它們。
現在我的問題是,我希望能夠呈現確切的東西,但是在用戶選擇的日期之前,我已經嘗試通過我的項目文件手動執行此操作並且它有效,但我想知道是否可以擁有這些值從用戶移動到我的方法? 我的意思是導航欄中有一個基本表單,允許用戶選擇開始日期和截止日期,但我不確定如何根據需要此日期范圍的方法將這些值傳遞到我的 models.py 中應用。
我將展示一個例子。
#this is my view that grabs relevant dates
def asearch_stats(request):
if request.method == 'POST':
from_date = request.POST['from']
to_date = request.POST['to']
return render(request,"Sales/salesfilter.html",{"flookup":flookup})
# this is my model with the methods I'm referring to below:
class SalesAgent(models.Model):
user = models.OneToOneField(User,on_delete=models.SET_NULL,null=True,related_name="sauser")
SA_name = models.CharField(max_length=40)
role = models.CharField(choices=Roles,default="default",max_length=13)
def __str__(self):
return self.user.username
#FILTERED SEARCH
# I need those dates on the below ones to be the variables like something like this
def get_dates(request):
if request.method == 'POST':
from_date = request.POST['from']
to_date = request.POST['to']
def sfget_totals(self):
return self.agent_sale.filter(Date_created__gte=(from_date),Date_created__lte=(to_date))
def sfget_confirmed(self):
return self.agent_sale.filter(State="Confirmed",Date_created__gte=('2022-03-01'),Date_created__lte=('2022-03-02'))
def sfget_debi(self):
return self.agent_sale.filter(AcknowledgeQA=True,State="Confirmed",Debi_status="Accepted",Date_created__gte=('2022-03-01'),Date_created__lte=('2022-03-02'))
def sfget_requested(self):
return self.agent_sale.filter(Debi_status="Requested",Date_created__gte=('2022-03-01'),Date_created__lte=('2022-03-02'))
def sfget_cancelled(self):
return self.agent_sale.filter(State="Cancelled",Date_created__gte=('2022-03-01'),Date_created__lte=('2022-03-02'))
def sfget_pending(self):
return self.agent_sale.filter(State="Pending",Date_created__gte=('2022-03-01'),Date_created__lte=('2022-03-02'))
你不能。 模型封裝和抽象數據庫表。 視圖存在於更高級別。 model 不能引用“它的”視圖,因為 model 實例可以在沒有任何視圖的情況下存在。 例如,當您在執行管理命令或 shell 或 Celery 任務時。
也許這些方法應該是(基於類的)視圖方法,而不是 object 方法。 沒有理由不能將視圖傳遞給模板。 基於類的視圖默認執行他的操作(作為上下文變量view
)
如果您希望有 model 個實例方法依賴於導航欄中的開始日期和結束日期,則必須將它們傳入。
class SalesAgent(models.Model):
...
def method(self, from_date, to_date)
您將從您的視圖中調用此方法,它類似於
agent = SalesAgent.objects.get( ...)
agent.method( from_date = request.POST['from'], to_date = request.POST['to'] )
有可能(如果有點“hacky”在您的視圖中“標記”一個 object,這樣一整套方法就不需要明確告知這些日期
agent = SalesAgent.objects.get( ...)
agent._from_date = request.POST['from']
agent._to_date = request.POST['to']
現在,您必須確保依賴於這些字段的代碼正常失敗(或應用默認值):
def method( self):
from_date = getattr( self, '_from_date', datetime.date( 1900,1,1) )
to_date = getattr( self, '_to_date', datetime.date.today() )
如果未應用郵票,則默認設置(明智地?)。 或者,
if not hasattr( self, '_to_date'):
raise AttributeError (
'SalesAgent object method "method" has been called in an invalid context: instance attribute "_to_date" is not yet set' )
我想總是可以將整個請求甚至整個視圖附加到 object 實例,如果你真的想要的話。 關於違約或失敗的警告也是可以理解的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.