第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Django-import-export - 如何將用戶信息傳遞給ForeignKeyWidget?

Django-import-export - 如何將用戶信息傳遞給ForeignKeyWidget?

守著星空守著你 2023-06-27 18:36:15
我需要以某種方式將用戶信息ForeignKeyWidget從資源類傳遞到類,我在其中創(chuàng)建foreignKey對(duì)象: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做這個(gè)的最好方式是什么?我嘗試自己解決這個(gè)問(wèn)題,并且非常接近,但無(wú)法解決最后一塊難題。您覆蓋__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']如果我以某種方式設(shè)法將用戶信息傳遞到變量中**kwargs,company那么我可以通過(guò)覆蓋ForeignKeyWidget的__init__類來(lái)在下游使用它: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任何幫助將不勝感激,我花了很長(zhǎng)時(shí)間才到達(dá)這里,我覺得我真的很接近。先感謝您。
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

事實(shí)證明,完全不使用ForeignKeyWidget 來(lái)實(shí)現(xiàn)這一點(diǎn)更容易。如果您有多個(gè)不唯一但具有相同名稱的外鍵(在我的例子中,由不同用戶創(chuàng)建相同的公司名稱),則可以通過(guò)以下方式解決問(wèn)題:


類 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')


class Meta:

    model = Contact

    skip_unchanged = True

    report_skipped = True

    exclude =('is_active', 'created_by')

    export_order = ('id','first_name','last_name','email','phone','address','description','company','created_on','website','job_title','birthday')


def after_import_instance(self, instance, new, **kwargs):

    instance.created_by = self.user # kwargs['user']


def import_field(self, field, obj, data):

    field_name = self.get_field_name(field)

    method = getattr(self, 'clean_%s' % field_name, None)

    if method is not None:

        obj = method(field, obj, data)

    super(ContactResource, self).import_field(field, obj, data)


def clean_company(self, field, obj, data):

    name = data[field.column_name]

    company, created = Company.objects.get_or_create(name=name, created_by=self.user)

    obj.company = company

    return obj


查看完整回答
反對(duì) 回復(fù) 2023-06-27
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)