Администратор Django save () не получает данные от ManyToManyField - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь получить выбранные объекты из affiliate_networks в админке Django, когда пользователь нажимает кнопку отправки.

Когда я выбираю один из affiliate_networks и отправляю его, консоль печатает пустое значение affiliate_networks, а затем я возвращаюсь на страницу, и выбранный объект сохраняется правильно. Итак, я отправляю его снова, затем консоль печатает выбранный объект. save() принимает только те объекты, которые уже сохранены, а не объекты, которые я выбираю перед сохранением.

Есть ли способ, которым я могу save() заметить affiliate_networks, чтобы выбрать какой-либо объект?

class Store(models.Model):
    ...
    affiliate_networks = models.ManyToManyField(AffiliateNetwork, blank=True)

    def save(self, *args, **kwargs):
        print(self.affiliate_networks.all())

1 Ответ

1 голос
/ 19 апреля 2019

Вы не можете сделать это в save () - как вы обнаружили, администратор Django не сохраняет объекты ManyToMany до тех пор, пока они не будут выполнены. Вы должны сделать это в методе save_related в ModelAdmin. Смотри https://timonweb.com/posts/many-to-many-field-save-method-and-the-django-admin/

В admin.py:

...

class StoreAdmin(admin.ModelAdmin):

    def save_related(self, request, form, formsets, change):
        super(StoreAdmin, self).save_related(request, form, formsets, change)
        print(form.instance.affiliate_networks.all())

...

admin.site.register(Store, StoreAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...