我有两个模型。一个是“任务”,另一个是“条目”,我可以在Django Admin面板中看到为每个任务创建的所有条目的概述。我想为登录用户创建一个类似页面,以显示他在数据库中创建的条目。
我试图通过在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中拥有的。我想在用户个人资料页面中为每个用户提供类似的内容(仅显示该用户所做的输入)。因为产品不属于我,所以我不得不完成任务。
答案 0 :(得分: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_queryset和ContentType。
如果要在更改列表中包含创建了特定Entry
的用户,请参考list_disply。
答案 1 :(得分:0)
检查应用中是否有admin.py
。这就是定义所有Django Admin条目的地方。您可能在那里有Tag
和Entry
的管理员条目。如果您要Profile
用一个,在此添加。