Mon problème: UpdateView créer nouvel objet au lieu de la mise à jour précédente, je pense que ce qui se passe parce que dans la définition de la classe de mon point de vue j'Override get_object méthode comme ceci:Django UpdateView créer un nouvel objet
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
Et si le courant utilisateur n'est pas propriétaire de l'objet - ce retour de la méthode rien - ce que je voulais, mais ma classe de formulaire créer un nouvel objet:
class ClientCreation(forms.ModelForm):
class Meta:
model = Client
fields = ('name', 'loyal')
Je pense que cela est arrivé parce que la forme ne reçoit pas de self.instance et créer de nouveaux à la place - quoi sho uld je fais dans cette situation? Je ne veux pas que de nouveaux objets soient créés, dans le cas où le propriétaire de l'objet n'est pas l'utilisateur actuel, je ne veux rien avoir à faire alors envoyer une telle demande de publication. Comment dois-je correctement mettre en œuvre cela?
MISE À JOUR 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)
Ensuite, vous pouvez aussi une erreur 404 lorsque le onwer n'est pas l'utilisateur actuel, ou non? –
pourriez-vous s'il vous plaît fournir le code de classe complète? –
@MosesKoledoye je ne veux pas soulever aucune erreur j'ai un bon message sur mon modèle, puis il ne reçoit pas un objet – Vova