【问题标题】:How to reference Users model to my app models and Provide a foreign key如何将用户模型引用到我的应用模型并提供外键
【发布时间】:2018-08-01 04:00:03
【问题描述】:

我正在使用 Django-Cookiecutter,它使用 Django-Allauth 来处理所有身份验证,并且安装了一个名为 user 的应用程序来处理与用户相关的所有内容,例如注册、退出等。

我正在为用户共享 models.py 文件

@python_2_unicode_compatible
class User(AbstractUser):

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = models.CharField(_('Name of User'), blank=True, max_length=255)

    def __str__(self):
        return self.username

    def get_absolute_url(self):
        return reverse('users:detail', kwargs={'username': self.username})

现在我已经添加了我的新应用,比如 Course,我的 models.py 是

class Course(models.Model):
    name = models.CharField(max_length=30)
    description = models.CharField(max_length=100)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("details:assess", kwargs={"id": self.id})

我还将views.py定义为

@login_required
def course_list(request):
    queryset = queryset = Course.objects.all()
    print("query set value is", queryset)
    context = {
             "object_list" :queryset,
              }

return render(request, "course_details/Course_details.html", context)

有什么方法可以将(外键)用户应用程序引用到我的课程应用程序,以便每个用户都有自己的课程分配给它。

一种可能的方法是根据用户过滤对象并将其传递给模板

我不知道如何映射用户和课程以获取分配给特定用户的课程列表。

【问题讨论】:

  • 是的,您可以使用外键。什么让你困惑?
  • 我已经添加了外键,但是当我根据用户查询时,我没有得到正确的结果
  • 显示你得到的代码和结果,并解释它与你的预期有何不同。
  • 1.在模型上定义一个外键,指向 auth.User;您可以使用自定义的相关名称; 2. 迁移; 3.迁移; 4.应该工作
  • 类似这样,user = models.ForeignKey(User, default='1'),我已经从“User App”导入了用户

标签: python django django-models django-views django-allauth


【解决方案1】:

除非您只向一位用户提供课程,否则在用户和课程模型之间建立一对多关系是没有意义的。所以,你需要一个多对多的关系。通过创建 UserProfile 模型并将 UserProfile 与您的课程相关联来扩展用户模型也是明智的。您可以查看here 了解如何扩展用户模型。

那么,你真正应该做的是:

class Course(models.Model):
    name = models.CharField(max_length=30)
    description = models.CharField(max_length=100)

    # Make sure you first import UserProfile model before referring to it
    students = models.ManyToManyField(UserProfile, related_name = 'courses')

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("details:assess", kwargs={"id": self.id})

另外,请注意添加和查询多对多关系略有不同。详情请见the docs

【讨论】:

    【解决方案2】:

    你可以直接添加外键为:

    user = models.Foreignkey(User,related_name="zyz")
    

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 2021-09-11
      • 2011-11-10
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 2018-07-28
      • 2015-01-16
      • 2022-10-21
      相关资源
      最近更新 更多