Я хочу ограничить количество экземпляров определенного класса. Я уже ограничил это, используя некоторый HTML, но если кто-то подшучивает, повторно использует ссылку на форму, можно сделать другой экземпляр.Django - Ограничить количество экземпляров модели для каждого пользователя
Так что в моем views.py, я сделать запрос
qry_models = Model.objects.filter(owner=request.user)
В моем HTML-шаблон, я уже сделал корректировки, чтобы предотвратить несколько экземпляров. Если их нет, один из них перенаправляется в ModelForm для создания экземпляра. Если в запросе есть модель, она отображается/используется.
{% for model in qry_models %}
{{ model }}
{% empty %}
<a href="{% url 'app:model_new' %}">Make a new instance</a>
{% endfor %}
Но если кто-то повторяет ссылку, в первую очередь перенаправляется, он может создать другой экземпляр. Это должно быть предотвращено.
Я хочу иметь один экземпляр для каждой учетной записи пользователя. Если я следую Limit number of model instances to be created, я всегда получаю ошибку MultipleObjectsReturned, так как она запрашивает все экземпляры со всей учетной записи, а не только экземпляры из активной/зарегистрированной учетной записи.
Редактировать: Я сделал еще один запрос, который всегда перенаправляет меня, если уже есть экземпляр. Но это хороший код-дизайн или просто полезный круг логики?
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()
....
Как я могу предотвратить это в админ? –
Как выглядит ваша модель? Я бы предложил определить поле 'owner' как' OneToOneField' вместо 'ForeignKey'. – Selcuk
Какой предел? Один экземпляр или какой-то другой номер? – Chris