我需要以某种方式将用户信息从资源类传递到ForeignKeyWidget
类,我在其中创建ForeignKey对象:
class CompanyWidget(ForeignKeyWidget):
def clean(self, value, row=None, *args, **kwargs):
print(self.user, file=sys.stderr)
if not value:
return None
else:
obj, _ = Company.objects.get_or_create(
name=value,
created_by='I NEED USER INFORMATION HERE SOMEHOW',
)
return obj
最好的方法是什么
我试着自己解决这个问题,结果很接近,但无法解决最后一个难题。您可以重写资源中的__init__
类并从中获取用户信息。然后,我不知道如何将这个self.user
信息传递到类变量company
代码如下:
class ContactResource(resources.ModelResource):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(ContactResource, self).__init__(*args, **kwargs)
company = fields.Field(
column_name='company',
attribute='company',
widget=CompanyWidget(model=Company, field='name', user='I NEED TO PASS USER HERE FROM __INIT__'))
def after_import_instance(self, instance, new, **kwargs):
instance.created_by = kwargs['user']
如果我设法在company
变量的**kwargs
中传递用户信息,那么我可以通过重写ForeignKeyWidget的__init__
类在下游使用它:
class CompanyWidget(ForeignKeyWidget):
def __init__(self, model, field='pk', *args, **kwargs):
self.model = model
self.field = field
self.user = kwargs.pop('user', None)
super(CompanyWidget, self).__init__(model, *args, **kwargs)
def clean(self, value, row=None, *args, **kwargs):
print(self.user, file=sys.stderr)
if not value:
return None
else:
obj, _ = Company.objects.get_or_create(
name=value,
created_by=self.user,
)
return obj
任何帮助都将不胜感激,我花了很长时间才来到这里,我觉得我真的很接近。先谢谢你
事实证明,根本不使用ForeignKeyWidget就可以更容易地实现这一点。 如果您有多个外键,这些外键不是唯一的,但具有相同的名称(在我的示例中,是由不同用户创建的相同公司名称),则可以通过以下方式解决此问题:
类ContactResource(resources.ModelResource):
相关问题 更多 >
编程相关推荐