Ich habe das einzigartige zusammen Modell Meta verwendet, es funktioniert, aber es kommt nur mit diesem Fehler. Ich möchte einen Formularüberprüfungsfehler statt eines IntegrityError auslösen.Wie Formular Validierungsfehler ausgelöst werden, wenn der Benutzer versucht, ein Objekt mit dem Objekt zweimal zu erstellen
IntegrityError bei/name/
UNIQUE fehlgeschlagen: canvas_canvas.user_id, canvas_canvas.canvas_name
anfordern Methode: POST Anforderungs-URL: http://127.0.0.1:8000/name/ Ausnahmetyp: IntegrityError Ausnahmewert:
UNIQUE-Einschränkung fehlgeschlagen: canvas_canvas.user_id, canvas_canvas.canvas_name
Ausnahme Ort: C: \ Benutzer \ AppData \ Local \ Programme \ Python \ Python35-32 \ lib \ site-packages \ django \ db \ Backends \ sqlite3 \ base.py in ausführen, Linie 337
class Canvas(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
canvas_name = models.CharField(
max_length=100,
validators=[
# validate_canvas_title,
RegexValidator(
regex=CANVAS_REGEX,
message='Canvas must only contain Alpahnumeric characters',
code='invalid_canvas_title'
)],
)
slug = models.SlugField(max_length=100, blank=True)
background_image = models.ImageField(
upload_to=upload_location,
null=True,
blank=True,
)
# sort catergory into alphabetical order
category = models.ForeignKey('category.Category', default=1, blank=True)
followers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='canvas_followed_by', blank=True)
class Meta:
unique_together = ['user', 'canvas_name']
Form
class CanvasModelForm(ModelForm):
class Meta:
model = Canvas
fields = ['canvas_name', 'category', 'background_image']
widgets = {
'canvas_name': TextInput(attrs={'class': 'form-input'}),
'category': Select(attrs={'class': 'form-input'}),
}
Ansicht
user = get_object_or_404(User, username=username)
form_create = CanvasModelCreateForm(request.POST or None)
if form_create.is_valid():
instance = form_create.save(commit=False)
instance.user = request.user
instance.save()
return redirect('canvases:canvas', username=request.user.username, slug=instance.slug)
template = 'pages/profile.html'
context = {
'user': user,
'form_create': form_create,
}
return render(request, template, context)
Nr Ihre Form macht die Validierung. Aber Sie haben keinen Code angezeigt, so dass wir nicht sehen können, was falsch ist. –
ich habe gerade die Frage aktualisiert. Ich denke, die Klasse Meta (unique_together = ['Benutzer', 'Canvas-Name']). ist die Ursache des Fehlers. – lolz
Und was ist der * tatsächliche * Fehler und Traceback? Und wo ist die Aussicht? –