Djangoクエリは1つのモデルを別のモデルとして返します

SkoomaVendor

同様の質問を見つけることができませんでしたが(おそらく正しい言い回しがわからないため)、これが私のジレンマです。私には2つのモデルがあり、一方は他方の関係を示しています。

友達関係がすでに存在する場合に「利用可能なユーザー」セクションにユーザーを表示しないかどうかを判断できるように、htmlテンプレートの「user_list」と「friends_list」を比較できるようにしたいと思います。

ただし、「user_list」オブジェクトはCustomUserモデルタイプであり、「friends_list」オブジェクトはFriendモデルタイプです。get_friends()メソッドの結果を返すには、これらの友達を 'user_list'クエリセットから、できればpkで除外して、文字列の比較について心配する必要がないようにするにはどうすればよいですか?

ありがとうございました!

Models.py

class CustomUserModel(AbstractBaseUser, PermissionsMixin):
    # Simplified for brevity
    username = models.CharFiend(_('username'), unique=True)

class Friend(models.Model):
    user1 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete.models.CASCADE, related_name='user1')
    user2 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete.models.CASCADE, related_name='user2')

    objects = FriendManager()

    class Meta:
        unique_together = ('user1', 'user2')

    def __str__(self):
        return str(self.user2)

Managers.py

class FriendManager(models.Manager):
    def is_friend(self, user1, user2):
        if not user1 or not user2:
            return False
        return super(FriendManager, self).get_queryset().filter(user1=user1).filter(user2=user2).exists()

    def get_friends(self, user):
        return super(FriendManager, self).get_queryset().filter(user1=user)

Views.py

class UserList(ListView):
    model = get_user_model()
    context_object_name = "object_list"
    template_name = "users.html"

    def dispatch(self, request, *args, **kwargs):
        self.user = get_user(request)
        return super(UserList, self).dispatch(request, *args, **kwargs)

    def get_queryset(self):
        return get_user_model().objects.order_by("-date_joined")

    def get_friends(self):
        if self.user:
            return Friend.objects.get_friends(self.user).order_by("user2")
        return None

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name, {
            'user_list': self.get_queryset(),
            'friends_list': self.get_friends(),
            'user': self.user
        })

Users.html

{% extends 'base.html' %}
{% block content %}
<h1>Available Users</h1>
{% for user in user_list %}
    {% if user not in friends_list %} <!-- This is my pain-point -->
        <p>{{ user }}</p>
    {% endif %}
{% endfor %}

<h1>Friends</h1>
{% for friend in friends_list %}
    <p>{{ friend }}</p>
{% endfor %}
{% endblock content %}
ivissani

クエリを変更するだけで、を取得できCustomUserます。したがって、クエリは次のようにCustomeUser.objects.filter(user2__user1=self.user)なりますCustomUserは、と友達であるを提供しself.userます。関係をどのように解釈するかに応じて、もクエリする必要がありますCustomUser.objects.filter(user1__user2=self.user)これらのクエリはget_friends()、ビューのメソッドのクエリを置き換える必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Djangoモデルをクエリして、1つの応答のみを取得しますか?

分類Dev

Djangoはモデルフォームに対して2つの別々の__str__を返します

分類Dev

find()とwith()は、子を持つモデルではなく、すべてのモデルを返します

分類Dev

Djangoは管理者で1つのモデルフィールドを別のモデルフィールドに対して検証します

分類Dev

Django:他のモデルのリストビュー内の1つのモデルにリンクしようとしています

分類Dev

クエリDjangoは、外部キー関係の2つのレベルをモデル化します

分類Dev

2つのモデルに基づいてデータベースからdjangoクエリを作成します

分類Dev

Laravel:モデルを返すときはいつでもモデルとの関係を返します

分類Dev

Djangoは2つのモデルからのリストクエリを連結します

分類Dev

Django:多モデルの特定の属性を持つ既存の関係について1対多の関係をクエリします

分類Dev

1つのリクエストに対して複数のモデルまたはDBですか?

分類Dev

Django:モデルのFKをモデルのPKを介してリンクさせて、1対多の関係にすることは可能ですか?

分類Dev

Djangoは、管理サイトで表示する場合とスクリプトでモデルのクエリを表示する場合に、同じモデル属性に対して2つの異なるタイムゾーンを表示します

分類Dev

Djangoの4つのモデルを介したクエリ

分類Dev

postgresを使用する2つのモデルのDjangoクエリセットは交差しません

分類Dev

Djangoモデルの属性はフォームによって正しく保存されますが、クエリするとNoneタイプが返されます

分類Dev

MongoDBは複数のモデルをクエリします

分類Dev

Django関連のモデル行をフェッチして辞書のリストとして返す方法は?

分類Dev

DjangoのPOSTリクエストがモデルフォームのオブジェクトIDではなくquerydictを返しています

分類Dev

DjangoのPOSTリクエストがモデルフォームのオブジェクトIDではなくquerydictを返しています

分類Dev

Djangoは外部キー値を別のモデルの属性と比較します

分類Dev

Djangoはモデルから特定のフィールドを外部キーとして返します

分類Dev

Djangoで1つのモデルを別のモデルのセットにリンクする

分類Dev

Djangoモデル。モデルのクラスを取得します

分類Dev

Djangoモデルは、特定のフィールド値を持つ別のモデルに基づいて選択肢を制限します

分類Dev

djangoクエリセットを介して他のモデルからモデルにアクセスする

分類Dev

Djangoの別のモデルの複数のフィールドとしてモデルを使用する

分類Dev

モデル関数は空の 1 列を返します

分類Dev

モデルはOKであるがリストが空の場合、DBへのlinqクエリはリスト付きのモデルを返します

Related 関連記事

  1. 1

    Djangoモデルをクエリして、1つの応答のみを取得しますか?

  2. 2

    Djangoはモデルフォームに対して2つの別々の__str__を返します

  3. 3

    find()とwith()は、子を持つモデルではなく、すべてのモデルを返します

  4. 4

    Djangoは管理者で1つのモデルフィールドを別のモデルフィールドに対して検証します

  5. 5

    Django:他のモデルのリストビュー内の1つのモデルにリンクしようとしています

  6. 6

    クエリDjangoは、外部キー関係の2つのレベルをモデル化します

  7. 7

    2つのモデルに基づいてデータベースからdjangoクエリを作成します

  8. 8

    Laravel:モデルを返すときはいつでもモデルとの関係を返します

  9. 9

    Djangoは2つのモデルからのリストクエリを連結します

  10. 10

    Django:多モデルの特定の属性を持つ既存の関係について1対多の関係をクエリします

  11. 11

    1つのリクエストに対して複数のモデルまたはDBですか?

  12. 12

    Django:モデルのFKをモデルのPKを介してリンクさせて、1対多の関係にすることは可能ですか?

  13. 13

    Djangoは、管理サイトで表示する場合とスクリプトでモデルのクエリを表示する場合に、同じモデル属性に対して2つの異なるタイムゾーンを表示します

  14. 14

    Djangoの4つのモデルを介したクエリ

  15. 15

    postgresを使用する2つのモデルのDjangoクエリセットは交差しません

  16. 16

    Djangoモデルの属性はフォームによって正しく保存されますが、クエリするとNoneタイプが返されます

  17. 17

    MongoDBは複数のモデルをクエリします

  18. 18

    Django関連のモデル行をフェッチして辞書のリストとして返す方法は?

  19. 19

    DjangoのPOSTリクエストがモデルフォームのオブジェクトIDではなくquerydictを返しています

  20. 20

    DjangoのPOSTリクエストがモデルフォームのオブジェクトIDではなくquerydictを返しています

  21. 21

    Djangoは外部キー値を別のモデルの属性と比較します

  22. 22

    Djangoはモデルから特定のフィールドを外部キーとして返します

  23. 23

    Djangoで1つのモデルを別のモデルのセットにリンクする

  24. 24

    Djangoモデル。モデルのクラスを取得します

  25. 25

    Djangoモデルは、特定のフィールド値を持つ別のモデルに基づいて選択肢を制限します

  26. 26

    djangoクエリセットを介して他のモデルからモデルにアクセスする

  27. 27

    Djangoの別のモデルの複数のフィールドとしてモデルを使用する

  28. 28

    モデル関数は空の 1 列を返します

  29. 29

    モデルはOKであるがリストが空の場合、DBへのlinqクエリはリスト付きのモデルを返します

ホットタグ

アーカイブ