Djangoビューのvalue_is_in配列を含む、複数のチェックでクエリセットをフィルタリングします

HBMCS

フォームを保存する前に、ユーザーが存在するかどうかを確認する必要があります。フィールドは、名前、姓、および1つまたは複数の値を持つことができるロールです。どうやってやるの?

def save(self, commit=True):
        profile = super(ProfileForm, self).save(commit=False)
        first_name = self.cleaned_data['first_name']
        surname = self.cleaned_data['surname']
        role = self.cleaned_data['role']

        if Profile.objects.filter(first_name=self.cleaned_data['first_name'], surname=self.cleaned_data['surname']).exists()
            raise forms.ValidationError("This profile already exists")

        elif commit:
            profile.save()

Profile.objects.filter(first_name=self.cleaned_data['first_name'], surname=self.cleaned_data['surname'], role__in[role]).exists()私に与えますinvalid syntaxエラーを。もちろん、名前と姓と役割がすべて同じプロファイル内に存在するかどうかを確認したいと思います。

私のモデル

class Role(models.Model):
    type= models.CharField(max_length=30)
    def __str__(self):
        return self.type

class Profile(models.Model):
    first_name = models.CharField(max_length=120, null=True, blank=True)
    surname = models.CharField(max_length=120, null=True, blank=True)
    role = models.ManyToManyField(Role, blank=True)
ウィレムヴァンオンセム

Pleasdeはこれをフォームでチェックません。モデルでチェックできます。確かに、これはUniqueConstraint[Django-doc]で実装できます

class Profile(models.Model):
    first_name = models.CharField(max_length=128)
    surname = models.CharField(max_length=128)
    role = models.CharField(max_length=128)

    class Meta:
        constraints = [
            models.UniqueConstraint(
                field=['first_name', 'last_name', 'role'],
                name='unique_name_and_role'
            )
        ]

検証はで自動的に行われるためModelForm、心配する必要はありません。これはデータベースレベルでも実施されます(データベースでサポートされている場合)。

より前では、unique_together[Djanog-doc]を指定できます

class Profile(models.Model):
    first_name = models.CharField(max_length=128)
    surname = models.CharField(max_length=128)
    role = models.CharField(max_length=128)

    class Meta:
        unique_together = [['first_name', 'last_name', 'role']]

の場合は、モデルのメソッドでManyToManyFieldこれを強制する方が適切です.clean(..)Profile

class ProfileForm(forms.ModelForm):

    # …

    def clean(self):
        cleaned_data = super().clean()
        first_name = self.cleaned_data['first_name']
        surname = self.cleaned_data['surname']
        role = self.cleaned_data['role']
        if Profile.objects.exclude(pk=self.instance.pk).filter(
            first_name=first_name,
            surname=surname,
            role__in=role
        ).exists():
            raise ValidationError('A profile already exists.')
        return cleaned_data

ビューでは、たとえば次の方法でこれを処理できます。

def my_view(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES)
        if form.is_valid():
            # …
        else:
            return HttpResponseBadRequest('invalid data')
    # …

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

配列プロパティのサブセットのみを含むオブジェクトでJavaScript配列をフィルタリングします

分類Dev

オブジェクトキーのサブセットの配列をフィルタリングします

分類Dev

Qオブジェクトとトリッキーなロジックを含む複雑なDjangoクエリセットフィルタリング

分類Dev

複数のチェックボックスフィールドをdjangoのビット演算出力にクリーンアップしますか?

分類Dev

複数の変数でDjangoクエリセットをフィルタリングする

分類Dev

Djangoクラスベースのビュー-クエリセットをフィルタリングして保存します

分類Dev

クエリセットをリバースでフィルタリングし、Djangoにチェックインします

分類Dev

Djangoクエリセット-最後の関連オブジェクトを取得し、そのデータでフィルタリングします

分類Dev

Django:複数のIDでクエリセットをフィルタリングする

分類Dev

(T)SQLクエリを使用して、 を含むすべてのデータセットをフィルタリングします

分類Dev

複数のテストでfilterメソッドを使用してオブジェクトの配列をフィルタリングします

分類Dev

Djangobulk_createは複数のフィールドの重複エントリをチェックします

分類Dev

クリック時に複数の条件で配列をフィルタリングする(チェックボックス要素)

分類Dev

一部のみをチェックしてクエリセットをフィルタリングする

分類Dev

JS-配列(オブジェクトを含む)を配列でフィルタリングします

分類Dev

列挙してチェックする以外に、クラスでサブビューをフィルタリングする別の方法はありますか?

分類Dev

複数の値をチェックして配列/オブジェクトをフィルタリングする方法

分類Dev

リクエストURLを作成して、同じフィールドでDjangoクエリセットを複数回フィルタリングします

分類Dev

クエリパラメータと単一のビューを含むDjangoURLで、さまざまなオブジェクトのセットを取得します

分類Dev

一意のフィールドをフィルタリングし、オブジェクトの配列から配列にプッシュします

分類Dev

チェックボックスグループを使用して、値で複数の列をフィルタリングする

分類Dev

Django-マルチフィルタリングクエリセットは空のクエリセットを返します

分類Dev

クエリセットでQ()の組み合わせではなくチェーンをフィルタリングします

分類Dev

Django-珍しいフィールドデータで複数のクエリセットを圧縮する

分類Dev

関連フィールドの最初のインスタンスの値でDjangoクエリセットをフィルタリングします

分類Dev

別の配列を含む一部のオブジェクトを含むオブジェクトの配列。配列を含むオブジェクト内の値でフィルタリングする必要があります

分類Dev

複数のオプションを使用してクエリセットをフィールドでフィルタリングする

分類Dev

AngularJSの部分文字列を含むプロパティでオブジェクトの配列をフィルタリングします

分類Dev

MongoDB-配列内の複数のオブジェクトから同じフィールドでドキュメントをクエリします

Related 関連記事

  1. 1

    配列プロパティのサブセットのみを含むオブジェクトでJavaScript配列をフィルタリングします

  2. 2

    オブジェクトキーのサブセットの配列をフィルタリングします

  3. 3

    Qオブジェクトとトリッキーなロジックを含む複雑なDjangoクエリセットフィルタリング

  4. 4

    複数のチェックボックスフィールドをdjangoのビット演算出力にクリーンアップしますか?

  5. 5

    複数の変数でDjangoクエリセットをフィルタリングする

  6. 6

    Djangoクラスベースのビュー-クエリセットをフィルタリングして保存します

  7. 7

    クエリセットをリバースでフィルタリングし、Djangoにチェックインします

  8. 8

    Djangoクエリセット-最後の関連オブジェクトを取得し、そのデータでフィルタリングします

  9. 9

    Django:複数のIDでクエリセットをフィルタリングする

  10. 10

    (T)SQLクエリを使用して、 を含むすべてのデータセットをフィルタリングします

  11. 11

    複数のテストでfilterメソッドを使用してオブジェクトの配列をフィルタリングします

  12. 12

    Djangobulk_createは複数のフィールドの重複エントリをチェックします

  13. 13

    クリック時に複数の条件で配列をフィルタリングする(チェックボックス要素)

  14. 14

    一部のみをチェックしてクエリセットをフィルタリングする

  15. 15

    JS-配列(オブジェクトを含む)を配列でフィルタリングします

  16. 16

    列挙してチェックする以外に、クラスでサブビューをフィルタリングする別の方法はありますか?

  17. 17

    複数の値をチェックして配列/オブジェクトをフィルタリングする方法

  18. 18

    リクエストURLを作成して、同じフィールドでDjangoクエリセットを複数回フィルタリングします

  19. 19

    クエリパラメータと単一のビューを含むDjangoURLで、さまざまなオブジェクトのセットを取得します

  20. 20

    一意のフィールドをフィルタリングし、オブジェクトの配列から配列にプッシュします

  21. 21

    チェックボックスグループを使用して、値で複数の列をフィルタリングする

  22. 22

    Django-マルチフィルタリングクエリセットは空のクエリセットを返します

  23. 23

    クエリセットでQ()の組み合わせではなくチェーンをフィルタリングします

  24. 24

    Django-珍しいフィールドデータで複数のクエリセットを圧縮する

  25. 25

    関連フィールドの最初のインスタンスの値でDjangoクエリセットをフィルタリングします

  26. 26

    別の配列を含む一部のオブジェクトを含むオブジェクトの配列。配列を含むオブジェクト内の値でフィルタリングする必要があります

  27. 27

    複数のオプションを使用してクエリセットをフィールドでフィルタリングする

  28. 28

    AngularJSの部分文字列を含むプロパティでオブジェクトの配列をフィルタリングします

  29. 29

    MongoDB-配列内の複数のオブジェクトから同じフィールドでドキュメントをクエリします

ホットタグ

アーカイブ