Отображение записей модели Django для авторизованного пользователя на странице профиля - PullRequest
0 голосов
/ 29 июня 2018

У меня две модели. Один - «Задача», а другой - «Вступление», и я могу видеть обзор всех записей, сделанных для каждой задачи, в панели администратора Django. Я хотел бы создать аналогичную страницу для вошедшего в систему пользователя, чтобы отобразить, какие записи он создал в БД.

Я пытался получить их, используя данные журнала с классом LogEntry, но я застрял на этом. Кто-нибудь знает эффективный способ сделать это?

У меня есть следующие модели

class Profile(models.Model):
    # Relations
    user = models.OneToOneField(
        User,
        related_name="profile",
        verbose_name=_("user")
        )
    # Attributes - Mandatory
    interaction = models.PositiveIntegerField(
        default=0,
        verbose_name=_("interaction")
        )
    inter_time = models.DateTimeField(auto_now=True)
    # Attributes - Optional
    # Object Manager
    objects = managers.ProfileManager()

    # Custom Properties
    @property
    def username(self):
        return self.user.username

    # Meta and String
    class Meta:
        verbose_name = _("Profile")
        verbose_name_plural = _("Profiles")
        ordering = ("user",)

    def __str__(self):
        return self.user.username


#@receiver(post_save, sender=settings.AUTH_USER_MODEL)
@receiver(post_save, sender=User)
def create_profile_for_new_user(sender, created, instance, **kwargs):
    if created:
        profile = Profile(user=instance)
        profile.save()

def login_user(sender, request, user, **kwargs):
    user.profile.interaction += 1
    user.profile.save()

user_logged_in.connect(login_user)


class Task(models.Model):
    task_name = models.CharField(max_length=250)
    task_time = models.DecimalField(max_digits=3, decimal_places=2)

    def __unicode__(self):
            return self.task_name

    # Object Manager
    #objects = managers.TaskManager()

    # Meta and String
    class Meta:
        verbose_name = _("Task")
        verbose_name_plural = _("Tasks")


class Entry(models.Model):
    select_task = models.ForeignKey(Task, related_name="entries")
    entry_quantity = models.IntegerField(default=0)
    entry_date = models.DateField('Task performed date')
    publication_date = models.DateField(auto_now_add=True)

    def __unicode__(self):
        return u'%s' % self.entry_quantity

    # Object Manager
    #objects = managers.EntryManager()

    # Meta and String
    class Meta:
        verbose_name = _("Entry")
        verbose_name_plural = _("Entries")

Это то, что у меня есть в Admin. Я хочу, чтобы что-то подобное было для каждого пользователя (покажет записи, сделанные только этим пользователем) на странице профиля пользователя. Мне пришлось пересечь задачи, так как продукт не принадлежит мне.

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Как то так?

# in admins.YourModelAdmin
def get_queryset(self, request):
    qs = super().get_queryset(request)
    content_type = ContentType.objects.get_for_model(Entry)
    created_by_user = LogEntry.objects.filter(user=request.user, content_type = content_type).values_list('pk', flat = True)
    return qs.filter(pk__in=created_by_user)

Возможно, придется поиграть с битами и бобами; но это должно получить вам Entry объекты, созданные текущим вошедшим в систему пользователем. Для получения дополнительной информации, пожалуйста, прочитайте get_queryset и ContentType .
Если вы хотите включить пользователя, который создал определенный Entry в свой список изменений, обратитесь к list_disply .

0 голосов
/ 29 июня 2018

Проверьте, есть ли у вас admin.py в вашем приложении. Именно здесь определены все записи администратора Django. Вероятно, у вас есть записи администратора для Tag и Entry. Если вы хотите один для Profile, добавьте его туда.

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