2016-12-14 13 views
1

特定のクラスのインスタンス数を制限したい。私はすでにいくつかのHTMLを使ってそれを制限していましたが、もし誰かが卑劣な形でフォームへのリンクを再利用すると、別のインスタンスを作ることができます。Django - すべてのユーザのモデルのインスタンス数を制限する

だから私のviews.pyに、私は、クエリ私のHTMLテンプレートで

qry_models = Model.objects.filter(owner=request.user) 

が、私はすでに複数のインスタンスを防止するための調整を行ってください。存在しない場合は、ModelFormにリダイレクトされてインスタンスが作成されます。クエリにモデルがある場合は、表示/使用可能です。

しかし、誰かがリンクを再利用した場合、最初にリダイレクトされると、別のインスタンスを作成できます。それは防止されるべきである。

各ユーザーアカウントごとに1つのインスタンスが必要です。 Limit number of model instances to be createdに従うと、アクティブ/ログインしたアカウントのインスタンスだけでなく、すべてのインスタンスからすべてのインスタンスを照会するので、常にMultipleObjectsReturnedというエラーが発生します。

編集: すでにインスタンスがある場合は、常に私をリダイレクトする別のクエリを作成しました。しかし、その優れたコード設計や有用な論理サークルですか? Djangoでのユーザのためのインスタンスを制限する

def model_new(request): 
    mymodel = Model.objects.filter(owner=request.user) 
    counter = mymodel.count() 
    if counter >0: 
     return HttpResponseRedirect('somewhere') 

    if request.method != 'POST': 
     form = ModelForm() 
    .... 
+0

どうすれば管理者で防ぐことができますか? –

+1

あなたのモデルはどのように見えますか? 'OwnKey'フィールドを' ForeignKey'ではなく 'OneToOneField'として定義することをお勧めします。 – Selcuk

+0

制限はありますか? 1つのインスタンス、またはその他の番号? – Chris

答えて

1

ベスト・プラクティスは、テーブル内のユーザー列にone-to-one field relationshipをマッピングしています。

# models.py 
from django.db import models 

class Student(models.Model): 
    user = models.OneToOneField(User) 
    course = models.CharField(max_length=100) 

#Refactoring your views.py 
from django.http import HttpResponse 

def create_student(request): 
    if not Student.objects.filter(user=request.user).exists(): 
     Student.objects.create(user=request.user, course='Engineering') 
     return HttpResponse('Student is created') 
    else: 
     return HttpResponse('Student already exists') 
+0

要件が1つのインスタンスのみの場合は、これが正しい方法です。しかし、タイトルは "インスタンスの数を制限する"とは言わない – e4c5

関連する問題