【问题标题】:How To add Models with OneToOneField to every of some ForeignKey Custom User Models如何将带有 OneToOneField 的模型添加到每个 ForeignKey 自定义用户模型
【发布时间】:2018-03-25 00:33:56
【问题描述】:

以下场景:

我需要一个自定义用户模型和用户模型的外键。

例如:一个用户可以拥有一些行星

class UserPlanet(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(default='planet', max_length=40)

对于每个创建的行星,都有其他具有 OneToOneField 的模型。

例如包含大小、颜色或它最喜欢的动物的模型,但是:

class PlanetValues(models.Model):
    user_planet = models.OneToOneField(UserPlanet, related_name='planet_values', on_delete=models.CASCADE)
    size = models.IntegerField(default=1000)

Django 视图选择行星之一的最佳方式是什么,并且模板上的信息被过滤到相应的行星。 这是一个简单的例子,但原理没有改变。我该如何处理这种情况?

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    假设我理解您的意思,作为一个非常简单的示例,根据提供的 username 和 name 选择 UserPlanet 的视图可能类似于:

    def show_planet(request):
        user = User.objects.get(username=request.GET['username'])
        planet = UserPlanet.objects.get(user=user, name=request.GET['name'])
    
        return render(request, 'show_planet.html'. {'planet', planet})
    

    然后渲染show_planet.html模板中的值:

    <strong>Planet name:</strong><span>{{ planet.name }}</span>
    <strong>Planet size:</strong><span>{{ planet.planet_values.size }}</span>
    

    上面的示例假设给定用户和名称只有一个UserPlanet。如果不是这种情况,您将不得不 filter UserPlanet 对象,然后遍历模板中的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2019-02-05
      相关资源
      最近更新 更多