Mein Problem: UpdateView neues Objekt erstellen, anstatt vorherige aktualisieren, ich glaube, seine geschieht, weil in Klassendefinition meiner Ansicht i Methode wie folgt außer Kraft setzen get_object:Django UpdateView erstellen neues Objekt
def get_object(self, queryset=None):
try:
object_get = self.model.objects.get(pk=self.kwargs['pk'])
except ObjectDoesNotExist:
raise Http404("No object found matching this query")
if self.request.user.is_authenticated():
if object_get.owner == self.request.user:
return object_get
Und so, wenn Strom Benutzer ist nicht Eigentümer des Objekts - diese Methode Rückkehr nichts - sein, was ich wollte, aber meine Form Klasse statt neues Objekt erstellen:
class ClientCreation(forms.ModelForm):
class Meta:
model = Client
fields = ('name', 'loyal')
ich denke, das passiert ist, weil Form erhält keine self.instance und erstelle stattdessen neues - was sho Was mache ich in dieser Situation? Ich möchte nicht, dass ein neues Objekt erstellt wird, wenn der Eigentümer des Objekts nicht der aktuelle Benutzer ist, möchte ich nichts passieren und dann eine solche Anfrage senden. Wie soll ich das richtig umsetzen?
UPDATE views.py:
class Distinct(generic.UpdateView):
def get_object(self, queryset=None):
try:
object_get = self.model.objects.get(pk=self.kwargs['pk'])
except ObjectDoesNotExist:
raise Http404("No object found matching this query")
if self.request.user.is_authenticated():
if object_get.owner == self.request.user:
return object_get
def get_form_kwargs(self):
kwargs = super(Distinct, self).get_form_kwargs()
if self.request.user.is_authenticated():
kwargs.update({'user': self.request.user})
return kwargs
def post(self, request, *args, **kwargs):
if request.POST.get('action', '') == 'Delete':
object_get = self.get_object()
request.session['deleted_data'] = str(object_get)
object_get.delete()
return redirect(reverse('crm:main'))
else:
return super(Distinct, self).post(request, *args, **kwargs)
def get_success_url(self):
return reverse('crm:{}'.format(self.distinct_template), kwargs={'pk': self.kwargs['pk']})
class DistinctClient(Distinct):
form_class = ClientCreation
model = Client
template_name = 'crm/client_detail.html'
all_template = 'clients'
distinct_template = 'client'
def get_form_kwargs(self):
return generic.UpdateView.get_form_kwargs(self)
Dann könnten Sie auch ein 404 erhöhen, wenn der onwer nicht der aktuelle Benutzer ist, oder nicht? –
Könnten Sie bitte vollständigen Klassencode angeben? –
@MosesKoledoye ich möchte keinen Fehler auslösen, ich habe richtige Nachricht auf meiner Vorlage, dann erhält es kein Objekt – Vova