[英]Exception Value: missing 1 required positional argument
我想使用def / function獲取默認值
看一下代碼片段:
models.py
from django.http import HttpRequest
class Contacts(Model):
def get_client_ip(ip):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
ipaddress = CharField(default=get_client_ip, max_length=20, verbose_name='your IP Address')
makemigrations和migration在沒有錯誤或警告的情況下執行了它。
當我運行時,我得到以下信息:異常值:get_client_ip()缺少1個必需的位置參數:'ip'
你能幫我嗎?
您的代碼中存在多個錯誤。
Value: get_client_ip() missing 1 required positional argument:
那是因為default=get_client_ip
調用了沒有參數的函數。 另外我不明白為什么get_client_ip
需要IP? 只需刪除並使用@staticmethod
@staticmethod
def get_client_ip():
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
但這也不起作用,因為沒有在get_client_ip
定義request
。 請求對模型不可見。 解決此問題的最簡單方法是刪除默認值,並將get_client_ip
邏輯移至視圖,並在模型創建時設置ip
字段。
我認為您不能將參數傳遞給默認字段。 我可以想到的最好的方法是重寫模型的保存功能。
例如:
class Contacts(models.Model):
ipaddress = CharField(max_length=20, verbose_name='your IP Address')
...
def save(self):
if not self.id: #first time saving the model
self.ip = self.get_client_ip(self.ip)
super(Contacts, self).save(*args, **kwargs)
編輯:
抱歉,您剛剛意識到您正在解析HTTP標頭以獲取字段值。 您應該直接從控制器上為您的模型進行設置,並使用save
功能執行您可能需要的任何清理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.