使用外键从另一个模型导出字段

Exporting a field from another model, using foreign key

我刚刚设置了整个导入导出的东西,但我无法使用外键从另一个模型导出字段。

models.py

from django.db import models
from django.contrib.auth.models import User
from datetime import date
from .validators import validate_file_size

# Create your models here.
class CORMeserii(models.Model):
    CodCOR = models.CharField(max_length=25, primary_key=True, unique=True)
    MeserieCor = models.CharField(max_length=50, unique=True)
    def __str__(self):
        return str(self.CodCOR + " - " + self.MeserieCor)
    class Meta:
       verbose_name_plural = "CORuri"

class Oferta(models.Model):
    solicitant = models.ForeignKey(User, on_delete=models.CASCADE)
    cor = models.ForeignKey(CORMeserii, on_delete=models.CASCADE)
    dataSolicitare = models.DateField(default=date.today)
    locuri = models.IntegerField()
    agentEconomic = models.CharField(max_length=50)
    adresa = models.CharField(max_length=150)
    dataExpirare = models.DateField()
    experientaSolicitata = models.CharField(max_length=200)
    studiiSolicitate = models.CharField(max_length=200)
    judet = models.CharField(max_length=20)
    localitate = models.CharField(max_length=25)
    telefon = models.CharField(max_length=12)
    emailContact = models.EmailField(max_length=40)
    rezolvata = models.BooleanField(default=False)
    def __str__(self):
        return str(self.cor)

admin.py

from django.contrib import admin
from .models import Oferta, CORMeserii
from import_export import resources
from import_export.admin import ImportExportMixin, ImportExportModelAdmin
import tablib

# Register your models here.
class CorImEx(resources.ModelResource):
    class Meta:
        model = CORMeserii

class CorAdmin(ImportExportMixin, admin.ModelAdmin):
    list_display = ('CodCOR', 'MeserieCor')
    resource_class = CorImEx

class CorImExAdmin(ImportExportModelAdmin):
    resource_class = CorImEx

class OferteImEx(resources.ModelResource):
    class Meta:
        model = Oferta
        fields = ('id', 'solicitant', 'cor', 'oferta.cor.MeserieCor')

class OfertaAdmin(ImportExportMixin, admin.ModelAdmin):
    list_display = ('id', 'solicitant', 'dataExpirare', 'dataSolicitare')
    resource_class = OferteImEx

class OferteImExAdmin(ImportExportModelAdmin):
    resource_class = OferteImEx

admin.site.register(Oferta, OfertaAdmin)
admin.site.register(CORMeserii, CorAdmin)

您可以在 OferteImEx class - 字段 'oferta.cor.MeserieCor'.

中看到它

我想从模型 CORMeserii 导出 MeserieCor 字段 - 但我无法弄明白。

我试过:'oferta.cor.MeserieCor', cor.MeserieCor', 'MeserieCor'(尽管最后两个对我来说根本没有意义)。

有没有办法以某种方式导出该字段,即使它来自另一个模型? (我很确定有,但我想不通)

谢谢。

在 Django 中,您使用双下划线 (__) 来跟随查找中的关系。它在文档中:

Django offers a powerful and intuitive way to “follow” relationships in lookups, taking care of the SQL JOINs for you automatically, behind the scenes. To span a relationship, just use the field name of related fields across models, separated by double underscores, until you get to the field you want.

Link: Lookups that span relationship

django import export 文档中甚至有一个示例如何遵循关系:

When defining ModelResource fields it is possible to follow model relationships:

class BookResource(resources.ModelResource):

    class Meta:
        model = Book
        fields = ('author__name',)

来源:https://django-import-export.readthedocs.io/en/latest/getting_started.html#customize-resource-options