5

私は次のモデルを持っています(例、実際には1つではありません):

class ModelB(models.Model):
  name = models.CharField(max_length=50)

  def __str__(self):
    return self.name

class ModelA(models.Model):
  code = models.CharField(max_length=50, unique=True, help_text="Code unique")
  foreignkey = models.ForeignKey(ModelB, unique=True)

そして私のadmin.pyには次のものがあります:

class ModelBAdmin(admin.ModelAdmin):
  list_display = ('name',)

class ModelAAdmin(admin.ModelAdmin):
  list_display = ('code', 'foreignkey')

admin.site.register(ModelA, ModelAAdmin)
admin.site.register(ModelB, ModelBAdmin)

私は次のようなものを作ります:

class ModelBAdmin(admin.ModelAdmin):
   list_display = ('name', 'code')

コードは、ModelAコードからのコード関係である必要があります。どうすればこれを作ることができますか?

PD:英語でごめんなさい...

たくさん、アントニオ。

4

3 に答える 3

8

あなたのコメントは、実際にあなたが興味を持っているのはリストの表示ではなく、編集であることを示しています。そのためには、インラインフォームを使用する必要があります。

class ModelAInline(admin.StackedInline):
  model = ModelA

class ModelBAdmin(admin.ModelAdmin):
  list_display = ('name',)
  inlines = [ModelAInline]

admin.site.register(ModelA, ModelAAdmin)

これで、編集フォームの各ModelAの下にModelBのリストがあり、そこで直接編集できます。

(unique = TrueでForeignKeyを使用する代わりに、おそらくOneToOneFieldを使用する必要があることに注意してください。)

于 2012-07-31T16:25:30.097 に答える
4

list_display次の方法でカスタムアイテムを定義できます。

class ModelBAdmin(admin.ModelAdmin):

    def modelA_Codes(self, inst):
        return ','.join([b.code for b in inst.modela_set.all()])

    list_display = ('name', 'modelA_Codes')

1つのmodelBを複数のmodelAアイテムにアタッチできるため、指定されたModelBに適用可能なコードのリストを返す必要があります。

于 2012-07-31T16:52:19.737 に答える
3

@ vartec、@ DanielRoseman、@Tishoに感謝します。最後に、あなたの提案で私は次のことをしました(私はそれが非常に効率的ではないと思います...しかし他の方法はエラーを引き起こします...)

class SubvencionCAAdmin(admin.ModelAdmin):
  search_fields = ['nombre', 'tipo', 'resumen']

  def Subvencion_Code(self):
      lista_subvenciones = Subvencion.objects.all()
      for subvencion in lista_subvenciones :
            if (self.nombre == subvencion.CA.nombre):
                return subvencion.codigo

  list_display = ('nombre', Subvencion_Code)

SubvencionCAAdminは、「ModelB」および「Subvencion」「ModelA」と同等です。

どうもありがとう

于 2012-07-31T17:14:41.040 に答える