Django-import-export-如何将用户信息传递给ForeignKeyWidget?

时间:2020-08-28 21:15:37

标签: python django django-import-export

我需要以某种方式将用户信息资源类传递给 ForeignKeyWidget 类,在其中创建ForeignKey对象:< / p>

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']

如果我设法以某种方式在**kwargs变量的company中传递用户信息,那么我可以通过覆盖 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

任何帮助将不胜感激,我花了很长时间才来到这里,我觉得我真的很近。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

事实证明,完全不需要使用ForeignKeyWidget即可轻松实现此目的。 如果您有多个并非唯一但具有相同名称的外键(在我的情况下,是由不同用户创建的相同公司名称),这是解决问题的方法:

Class ContactResource(resources.ModelResource):

<body>
  <div class="header">
    <h1>Kevs Hotel</h1>
    <input type="search" id="locationSearch" name="location" placeholder="Location" onkeyup="searchBarFeatures()">
    <input type="date" class="checkInTime" name="checkInDate" placeholder="Check in" required>
    <input type="date" class="checkOutTime" name="checkOutDate" placeholder="Check out">
    <input type="number" class="noOfGuests" name="NoOfGuests" placeholder="Guests">
    <input type="submit" class="submitBtn" value="Search">
  </div>

  <ul id="hotelList">
  </ul>

  
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
相关问题