Я использую эти модели:MultipleObjectsReturned в ... получить() возвращала более одного человека - он вернулся 2
class Person(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
name_in_bangla = models.CharField(max_length=100)
nick_name = models.CharField(max_length=30)
birth_date = models.DateField()
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='member_persons')
class Meta:
ordering = ['name']
unique_together = ['name', 'birth_date']
мои просмотры:
class PersonCreate(SuccessMessageMixin,CreateView):
model = Person
form_class = MemberForm
success_message = "%(name)s was added as %(category)s successfully."
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.request = self.request
return form
мои просмотров:
class MemberForm(ModelForm):
class Meta:
model = Person
exclude =('user',)
def clean(self):
user = get_user(self.request)
name = self.cleaned_data.get('name')
birth_date = self.cleaned_data.get('birth_date')
if self.instance.id:
if Person.objects.filter(user=user).exclude(id=self.instance.id).exists():
self.add_error('name', "You already submitted data")
elif Person.objects.filter(name=name, birth_date=birth_date).exclude(id=self.instance.id).exists():
self.add_error('name', "Person with this Name and Birth date already exists.")
else:
if Person.objects.filter(user=user).exists():
self.add_error('name', "You already submitted data")
elif Person.objects.filter(name=name, birth_date=birth_date).exists():
self.add_error('name', "Person with this Name and Birth date already exists.")
return self.cleaned_data
def save(self, commit=True):
person = super().save(commit=False)
if not person.pk:
person.user = get_user(self.request)
if commit:
person.save()
self.save_m2m()
return person
Он отлично работает для разных лиц. Но когда я пытаюсь использовать одно и то же имя для человека, но с другой датой рождения, он дает MultipleObjectReturn с 'get(), возвращенным более чем одним Person - он возвратил 2!
Но я использовал unique_together = ['name', 'birth_date'] ограничения, а также использую чистый метод, чтобы поймать ошибки ограничений в формах. Но мои формы не ловят ошибки MultipleObjectReturned.
Как я мог поймать эти ошибки в своих формах? Что мои коды делают неправильно. Любые предложения по телу будут оценены.
других МОИХ просмотры:
class PersonDetailView(generic.DetailView):
queryset = (
Person.objects.all()
.prefetch_related('child_set')
# below omitted because of with tag
# and conditional display based on time
# .prefetch_related('blog_posts')
)
class PersonUpdate(SuccessMessageMixin,UpdateView):
model = Person
form_class = MemberForm
success_message = "%(category)s: %(name)s was updated successfully."
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.request = self.request
return form
@require_authenticated_permission(
'member.delete_person')
class PersonDelete(DeleteView):
model = Person
success_url = '/allmember/'
success_message = "%(category)s: %(name)s was deleted successfully."
def delete(self, request, *args, **kwargs):
messages.success(self.request, self.success_message)
return super(PersonDelete, self).delete(request, *args, **kwargs)
Где вы можете получить эту ошибку? – Rohan
Я получаю эту ошибку, когда я отправил форму, и ошибка отображается на локальном хосте, т. Е. Http://127.0.0.1:8000/person/ohiduzzaman/ –
Затем вы должны показать код для представления, которое служит этому URL-адресу, предположительно это является своего рода DetailView. –