Django Администратор сохраняет и отображает данные только для вошедшего в систему пользователя. - PullRequest
0 голосов
/ 21 января 2020

В моем django проекте администратора мне нужно сохранить, а затем отобразить данные для другого пользователя. Я бы хотел, чтобы при автоматическом сохранении полевой пользователь принимал зарегистрированное пользовательское значение, а при повторном входе в систему я мог видеть только сохраненные данные. только для моего пользователя. У меня есть такой тип models.py:

class TheLinks(models.Model):
    lk_name = models.CharField(max_length=20)

    def __str__(self):
        return self.lk_name

class UserComLinks(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="User")
    l_id = models.ForeignKey(TheLinks, on_delete=models.CASCADE, verbose_name="Portal")
    l_link = models.CharField(max_length=100)

    def __str__(self):
        return str(self.l_id)

Теперь, если я запустил django администратора, я вижу эту форму:

enter image description here

ну, во-первых, я хотел бы спрятать поле имени пользователя и сохранить мою модель в автоматическом режиме c эти данные, используя текущего зарегистрированного пользователя, затем я хотел бы, чтобы при входе в систему пользователь мог видеть только данные хоста. Я пытаюсь управлять admin.py следующим образом:

admin.py

class UserComLinksAdmin(admin.ModelAdmin):

list_display = ('l_id',  'l_link')

def changeform_view(self, request, obj_id, form_url, extra_context=None):

        try:
            l_mod = UserComLink.objects.latest('id')
        except Exception:
            l_mod = None

        extra_context = {
            'lmod': l_mod,
        }
        return super(UserComLinksAdmin, self).changeform_view(request, obj_id, form_url, extra_context=extra_context)

, но ничего не меняется.

Может ли кто-нибудь мне помочь?

Огромное спасибо заранее

1 Ответ

0 голосов
/ 21 января 2020

Вы можете исключить поле user из формы администратора и установить значение текущего пользователя перед сохранением:

class UserComLinksAdmin(admin.ModelAdmin):
    list_display = ('l_id',  'l_link')
    exclude = ('user',)

    def save_form(self, request, form, change):
        obj = super().save_form(request, form, change)
        if not change:
            obj.user = request.user
        return obj
...