【发布时间】:2021-04-30 01:09:02
【问题描述】:
对不起,我对 Django 很陌生。
好吧,在我的项目中,每篇博文都有自己的成员组。只有当您的兴趣状态为“已接受”时,您才是会员,并且您会自动添加到会员列表中。每个用户都可以对任何博文“提交兴趣”。
所以现在在用户的帐户页面上,我想查询用户是会员的博客文章(又名兴趣状态 = “接受”)
我还想查询用户已提交感兴趣并且正在等待被接受的所有博客文章。到(又名兴趣状态=“待定”,还不是会员)
如果你感到困惑,members 是 BlogPost 模型的一个字段,status 是 InterestInvite 模型的一个字段:).....
因此,在我的模板中,我希望拥有我所加入的所有博客文章的标题,以及我感兴趣的那些博客文章仍处于待显示状态的标题。当我单击标题时,我将被定向到该特定的博客文章。谁能分享这个查询是如何完成的?
我面临的问题是我不能在我的views.py 中使用blog_post = get_object_or_404(BlogPost, slug=slug),因为他们会说NameError,因为slug 没有定义。而且我的 Account 模型中没有外键到 BlogPost 模型。我的外键只在 BlogPost 模型中。
不确定是否有人对查询有任何解决方案以及如何在模板上显示信息。谢谢!
models.py
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
class BlogPost(models.Model):
title = models.CharField(max_length=50, null=False, blank=False, unique=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
slug = models.SlugField(blank=True, unique=True)
members = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="members")
class Interest(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
blog_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
class InterestInvite(models.Model):
ACCEPT = "ACCEPT"
DECLINE = "DECLINE"
PENDING = "PENDING"
STATUS_CHOICES = [
(ACCEPT, "accept"),
(DECLINE, "decline"),
(PENDING, "pending"),
]
interest = models.OneToOneField(Interest, on_delete=models.CASCADE, related_name="interest_invite")
status = models.CharField(max_length=25, choices=STATUS_CHOICES, default=PENDING)
urls.py
path('<user_id>/', account_view, name="view"),
views.py
def account_view(request, *args, **kwargs):
context = {}
user_id = kwargs.get("user_id")
try:
account = Account.objects.get(pk=user_id)
context['account'] = account
except:
return HttpResponse("Something went wrong.")
if account:
context['id'] = account.id
context['username'] = account.username
context['email'] = account.email
context['profile_image'] = account.profile_image.url
context['hide_email'] = account.hide_email
context['biography'] = account.biography
blog_posts = BlogPost.objects.filter(author=account)
context['blog_posts'] = blog_posts
return render(request, "account/account.html", context)
account.html
{% if request.user in blog_post.members.all %}
{% endif %}
【问题讨论】:
标签: django django-models django-views django-forms django-templates