简体   繁体   中英

Show fields passing through a ManyToMany field django admin

I'm working on a project developed in Python 2.7 and Django 1.11.
I'm trying to show in admin page two fields passing through a ManyToMany field.

Here the models:

class ModelZero(Model):
    # some fields
    mtm_field = models.ManyToManyField(to="ModelOne", through="ModelTwo")

class ModelOne(Model):
    # some fields
    field_1_1 = models.CharField(unique=True, max_length=200)
    field_1_2 = models.BooleanField(default=True)

class ModelTwo(Model):
    # some fields
    field_2_1 = models.ForeignKey('ModelOne', on_delete=models.CASCADE)
    field_2_2 = models.BooleanField(default=True)

In the ModelZero admin page I want to show some fields from the ModelZero itself plus field_2_1 and field_2_2 from ModelTwo.
More in detail, the field_2_1 should be present using a custom widget.
Please note that ModelZeroAdmin is an inline ones.

Here the admin page:

class ModelZeroAdmin(DynamicRawIDMixin, admin.TabularInline):
    model = ModelZero
    fields = ('some', 'fields', 'field_2_2')
    form = forms.ModelZeroForm

    def field_2_2(self, obj):
        return obj.mtm_field.through.field_2_2

Here the form:

class ModelZeroForm(ModelForm):
    class Meta:
        widgets = {
            "mtm_field.through.field_2_1": dal.autocomplete.ModelSelect2Multiple(
                url="my-autocomplete-url"
            )
        }

In this way i have two errors:

  1. it's not possible add custom fields (field_2_2) in the fields tuple
  2. custom widget is not showed

Is there a way to achieve this goal using this models structure?

I don't have experience with older Django version, but if I am not mistaken the syntax for a related field in admin interface would be something like: mtm_field__field_2_2 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM