gpt4 book ai didi

python - 无法在 Django 中使用外键调用 QuerySet

转载 作者:行者123 更新时间:2023-12-04 13:33:25 25 4
gpt4 key购买 nike

版本
Mac 操作系统:10.15.6
姜戈:3.7.6
我想做的事
获取所有 Want_Item由特定 user 拥有的 s
你好,我是 Django 的初学者。我正在尝试创建一个应用程序,每个人都可以交换他们的元素。
我创建了模型,User , Parent_Item , Want_Item , Give_Item .我像下面这样设置它们之间的关系。

  • User - Parent_Item => 一对多
  • Parent_Item - Give_Item => 一对多
  • Parent_Item - Want_Item => 一对多

  • 我成功获得了所有 parent_item一位用户拥有。但是,我无法获得 want_item因为某些原因。
    这是我所面临的尝试和错误。
    >>>toshi_want = Toshi.item.want_item.all()
    Traceback (most recent call last):
    File "<console>", line 1, in <module>
    AttributeError: 'RelatedManager' object has no attribute 'want_item'

    >>> toshi_all=Toshi.item.all()
    >>> print(toshi_all)
    <QuerySet [<Parent_Item: MacBook>, <Parent_Item: Desk>, <Parent_Item: shirt>]>
    >>> print(toshi_all.want_item.all())
    Traceback (most recent call last):
    File "<console>", line 1, in <module>
    AttributeError: 'QuerySet' object has no attribute 'want_item'
    我肯定用 related_name = "want_item" 设置了一个外键.
    为什么我不能在这种情况下使用它?
    我希望你教我解决方案以及它为什么会发生。
    模型.py
    class User(models.Model):
    username = models.CharField(max_length=150, unique=True)
    email = models.EmailField(max_length=100, unique=True)
    password = models.CharField(max_length=20)
    confirm_pass = models.CharField(max_length=20)
    profile = models.TextField(max_length=800, blank=True, null=True)
    icon = models.ImageField(blank = True, null = True)
    login = models.BooleanField(default=False)
    # createdAt, updatedAt は時系列順等に並べたいモデルに付与
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    def __str__(self):
    return self.username

    class Meta:
    db_table = "users"



    class Give_Item(models.Model):
    ITEM_STATE = (
    ("新品", "新品、未使用"),
    ("未使用", "未使用に近い"),
    ("傷や汚れなし", "目立った傷や汚れなし"),
    ("やや傷や汚れあり", "やや傷や汚れあり"),
    ("傷や汚れあり", "傷や汚れあり"),
    ("状態が悪い", "全体的に状態が悪い")
    )
    state = models.CharField(max_length=20, choices=ITEM_STATE, default="新品")
    detail = models.TextField(max_length=800, blank=True, null=True)
    category = models.ForeignKey("Category", related_name="give_item", on_delete = models.SET_NULL, null = True)
    parent_item = models.ForeignKey("Parent_Item", null=True, on_delete=models.CASCADE, related_name="give_item")
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    def __str__(self):
    return self.parent_item.name

    class Meta:
    db_table = "give_items"

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    class Want_Item(models.Model):
    url = models.URLField(max_length=250, null=True, blank=True)
    parent_item = models.ForeignKey("Parent_Item", null=True, on_delete=models.CASCADE, related_name="want_item")
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    def __str__(self):
    return self.parent_item.name

    class Meta:
    db_table = "want_items"

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    class Parent_Item(models.Model):
    name = models.CharField(max_length=100)
    owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name="item")
    # テーブル内のフィールドはRequst, Deal の外部キー(requet, deal)
    keyword = models.ManyToManyField(Keyword, related_name = "parent_item")
    # Blandは一つしか選べないため、OneToMany関係
    bland = models.ForeignKey(Bland, related_name="parent_item", on_delete=models.SET_NULL, null=True)
    request_deal = models.ForeignKey("Request_Deal", null=True, on_delete=models.CASCADE, related_name="parent_item")
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    def __str__(self):
    return self.name

    class Meta:
    db_table = "parent_items"

    最佳答案

    像这样的东西?

    user_primary_key = 1
    Want_Item.objects.filter(parent_item__owner=user_primary_key)

    关于python - 无法在 Django 中使用外键调用 QuerySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63653271/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com