0

我有两个模型。一个是“任务”,另一个是“条目”,我可以在 Django 管理面板中查看为每个任务创建的所有条目的概述。我想为登录用户创建一个类似的页面,以显示他在 db 中创建的条目。

我试图通过使用 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")

这就是我在管理员中所拥有的。我希望在用户个人资料页面中为每个用户提供类似的内容(仅显示该用户所做的条目)。由于产品不属于我,我不得不跨越任务。

在此处输入图像描述

4

2 回答 2

1

像这样的东西?

# 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_querysetContentType
如果您想在您的更改列表中包含创建某个特定的用户Entry,请参阅list_disply

于 2018-06-29T17:27:10.327 回答
0

检查您的应用程序中是否有一个admin.py。这是定义所有 Django Admin 条目的地方。您可能在那里有管理员Tag条目Entry。如果您想要一个 for Profile,请在此处添加。

于 2018-06-29T14:47:01.767 回答