【问题标题】:Django - How to GET value from table where I don't have foreign key in table from which I want to GET object?Django - 如何从我想要获取对象的表中没有外键的表中获取值?
【发布时间】:2017-05-28 12:03:25
【问题描述】:

假设我有例如表Object1 与列id,id_users 其中id_usersid 的外键来自auth_user 表和表Object2 与列id ,id_object1,sth,其中id_object1Object1表中id的外键。Object1和Object2的ID在mySQL数据库中自动递增。

我想拥有例如这样的 URL /users/{id}/object2/?sth=123 并且我想从 Object2 表中获取对象,其中 {id} 是来自 auth_user 表的用户的 id(在这种情况下等于 @ 987654341@) 和 sth 等于 123 在相应字段中的 Object2 表中。

假设这是我的模型:

class Object1(models.Model):

    id_users = models.PositiveIntegerField(blank=True)

class Object2(models.Model):

    id_object1 = models.FloatField()
    sth = models.FloatField()

我有非常相似的问题,在这篇文章中解决了 - Django - How can I create POST with foreign key defined in URL? 但在这种情况下,我想从中获取对象的表中没有 foreign key。我不知道解决这个问题的最佳方法是什么。提前致谢。

【问题讨论】:

  • 字段之间是否有任何关系,比如object1__id_users = 2object2__id_object1 = 2 之类的?
  • 如果您的意思是 id_object1 是来自 Object1id_users 的外键,那么没有。 id_object1 是来自Object1 表的id 的外键(未在模型中定义,因为它在数据库中自动递增(也许这是错误的?))。
  • 那么应该是这样的。 id_object1 = models.ForeignKey(Object1) 对吗?
  • 如果id_object1 = models.ForeignKey(Object1) 是等价的,其中Object2 模型中的id_object1id 的外键,来自Object1 表,那么我的答案是肯定的。我想我将不得不改变我的模型。此刻我的模型还好吗?如果是,如何为我在主帖中描述的任务创建视图?
  • 你想要的是这个 -> "get object from Object2 table where {id} is the id of the user from auth_user table" 但是用户和object2 表,对吧?

标签: mysql django python-3.x django-models django-rest-framework


【解决方案1】:

根据我对您的困境的了解,我认为您的模型应该是这样的,

models.py

class Object1(models.Model):
    id_users = models.ForeignKey(User)

class Object2(models.Model):
    id_object1 = models.ForeignKey(Object1)
    sth = models.FloatField()

然后,您要求网址应该看起来像这样, /users/{id}/object2/?sth=123

那么你的观点应该是这样的,

views.py

def your_view(request, user_id):
    sth = request.GET.get('sth', '')
    sth_instance = Object2.objects.get(sth=sth, object1__id_users=request.user)
    #do whatever you want to do...

urls.py

urlpatterns = [
    url(r'^users/(?P<user_id>[\d]*)/object2/$', your_view, name='view_name'),
    ]

希望这是你要找的..

【讨论】:

  • 我将能够在 4 小时内测试它,我会回答它是否有效。无论如何感谢您的帮助。
  • 欣赏一下哥们
猜你喜欢
  • 2021-03-08
  • 2017-12-17
  • 2018-12-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多