0
使用Django導入/導出,我有問題將外鍵字段導入到我的Django模型。具體而言,我在我的模型中有三個要導入的字段(第四個參與者 - 具有默認值,因此我們可以忽略該字段),其中一個是IntegerField
,另外兩個是ForeignKey
字段。Django導入/導出:ForeignKey字段返回無
導入前,所有三個字段都轉換爲數字格式。然而,ForeignKey
領域無法讀取這些值,而是導入NaN
(大概是因爲我已經把這些模型領域null=True
。
我已經試過類似的問題的解決方案的多,但他們並沒有解決這個問題。
我在做什麼錯在這裏?
models.py
class User(auth.models.User,auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
class Forskningsresultater(models.Model):
id = models.IntegerField(primary_key=True)
authors = models.ManyToManyField(settings.AUTH_USER_MODEL, through='PersonRes', blank=True,related_name='authors',verbose_name="Authors")
... (plus irrelevant fields for this question)
class PersonRes(models.Model):
id = models.IntegerField(primary_key=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,verbose_name="user")
forskningsresultater = models.ForeignKey(Forskningsresultater,on_delete=models.CASCADE, null=True,verbose_name="forskningsresultater")
participant = models.BooleanField(default=True)
def __str__(self):
return "{}. Result {}: {}".format(self.id,self.forskningsresultater, self.user)
admin.py
from import_export import widgets, fields, resources
class PersonResResource(resources.ModelResource):
user = fields.Field(column_name='user_id', attribute='user', widget=widgets.ForeignKeyWidget(settings.AUTH_USER_MODEL, 'id'))
forskningsresultater = fields.Field(column_name='forskningsresultater_id', attribute='forskningsresultater', widget=widgets.ForeignKeyWidget(Forskningsresultater, 'id'))
class Meta:
model = PersonRes
fields = ('id','user','forskningsresultater','participant',)
from import_export.admin import ImportExportModelAdmin
class PersonResAdmin(ImportExportModelAdmin):
class Meta:
resource_class: PersonResResource
admin.site.register(PersonRes,PersonResAdmin)
myscript.py
...
df_persres[['A']] = df_persres[['A']].apply(pd.to_numeric)
df_persres[['B']] = df_persres[['B']].apply(pd.to_numeric)
df_persres[['C']] = df_persres[['C']].apply(pd.to_numeric)
df_persres.columns =['id','user_id','forskningsresultater_id']
if(len(df_persres.index) != 0):
import tablib
from import_export import resources
from accounts.models import PersonRes
personres_resource = resources.modelresource_factory(model=PersonRes)()
antall = len(df_persres.index)
for row in range(antall):
dataset = tablib.Dataset([ df_persres.iat[row,0],
df_persres.iat[row,1],
df_persres.iat[row,2]],
headers=['id', 'user_id', 'forskningsresultater_id'])
result = personres_resource.import_data(dataset, dry_run=True)
else:
pass
當打印dataset
,我得到以下(表明的dataset
只有一個實例):
id |user_id|forskningsresultater_id
---------|-------|-----------------------
148097456|1480974|56
然而,當我打印模式,採用pd.DataFrame.from_records(PersonRes.objects.all().values())
,我得到:
forskningsresultater_id id participant user_id
0 NaN 338884 True NaN
1 NaN 566233 True NaN
2 NaN 636223 True NaN
3 NaN 754756 True NaN
4 NaN 802856 True NaN
5 NaN 1005256 True NaN
...
我已經試過了。爲了以防萬一,我再次做了它,但它仍在兩個ForeignKey字段上都返回None。你有什麼可能是我的代碼錯誤的建議嗎? – Christian
您是否已經安裝了Forskningsresultater和用戶字段和ID,並且您只是在PersonRes中導入現有對象的聯合? –
你確定你的列標題也是你的文件中的用戶和forskningsresultater?你也設置標題爲_id –