Как сделать заранее заполненное поле с модельным полем связи? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь добавить prepopulated_fields в моем классе администратора, как это:

class ProfileAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ('get_trainer_name',)}

    def get_trainer_name(self, obj):
        return obj.user.get_full_name()

но получил ошибку en

ERRORS:
<class 'trainers.admin.ProfileAdmin'>: (admin.E030) The value of 'prepopulated_fields["slug"][0]' refers to 'get_trainer_name', which is not an attribute of 'trainers.Profile'.

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, related_name='profile', null=True)
    slug = models.SlugField()

Также я попытался сделать это по-другому - переопределить метод сохранения моделей:

class Profile(models.Model):
    user = models.OneToOneField(User, related_name='profile', null=True)
    slug = models.SlugField()
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.user.get_full_name())
            super(Profile, self).save(*args, **kwargs)

но это не дало результата ..

В соответствии с советом @Tiger_Mike, который я пытался сделать на ProfileAdmin

def get_form(self, request, obj=None, **kwargs):
    form = super(ProfileAdmin, self).get_form(request, obj, **kwargs)
    if not obj.slug:
        obj.slug = slugify(obj.user.get_full_name())
    return form

И он не работает со slugify, но хорошо работает без slugify

1 Ответ

0 голосов
/ 06 июня 2019

Только что быстро просмотрел документацию администратора и этот хук должен выполнить работу.

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