<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Django</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur le framework Web Django]]></description>
		<language>fr</language>
		<lastBuildDate>Sat, 18 Apr 2026 16:23:27 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Django</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title><![CDATA[[Python 3.X] Partie admin: désactiver le contrôle d'unicité]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179756&amp;goto=newpost</link>
			<pubDate>Thu, 09 Oct 2025 14:20:18 GMT</pubDate>
			<description>Bonjour à tous. Je débute sur...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous. Je débute sur django (mais je me débrouille en Python).<br />
Mon souci: j'ai un modèle avec un champ déclaré unique. Toutefois j'ai surchargé la méthode save() pour que si on entre une valeur déjà existante, la valeur soit automatiquement changée. Ca marche parfaitement quand je l'appelle en test direct.<br />
<br />
Maintenant j'intègre mon modèle dans la partie admin via @admin.register. Et quand je veux tester, là ça ne marche pas. A ce qui semble, le formulaire détecte que la valeur que je rentre est déjà présente et refuse donc d'appeler le save de mon modèle.<br />
Et donc je me dis que peut-être il y aurait moyen de contourner. Soit en surchargeant la méthode appelée par le formulaire (sauf que je ne sais pas laquelle il s'agit), soit demander au module d'admin de ne pas contrôler ce champ.<br />
<br />
Voici le modèle<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">class</span> Chapitre<span class="br0">&#40;</span>models.Model<span class="br0">&#41;</span>:
	titre = models.CharField<span class="br0">&#40;</span>max_length=<span style="color: #cc66cc;">50</span>, null=<span style="color: #339933;">False</span>, blank=<span style="color: #339933;">False</span>, unique=<span style="color: #339933;">True</span><span class="br0">&#41;</span>
	slug = models.SlugField<span class="br0">&#40;</span>max_length=<span style="color: #cc66cc;">50</span>, null=<span style="color: #339933;">False</span>, blank=<span style="color: #339933;">False</span>, unique=<span style="color: #339933;">True</span><span class="br0">&#41;</span>
	order = models.PositiveSmallIntegerField<span class="br0">&#40;</span>null=<span style="color: #339933;">False</span>, blank=<span style="color: #339933;">True</span>, unique=<span style="color: #339933;">True</span><span class="br0">&#41;</span>
	description = models.TextField<span class="br0">&#40;</span>null=<span style="color: #339933;">True</span>, blank=<span style="color: #339933;">True</span>, default=<span style="color: #339933;">None</span><span class="br0">&#41;</span>
&nbsp;
	<span style="color: #0000ff;">def</span> __str__<span class="br0">&#40;</span>self<span class="br0">&#41;</span>: <span style="color: #0000ff;">return</span> <span style="color: #FF0000;">&quot;%s (%d)&quot;</span> % <span class="br0">&#40;</span>self.titre, self.order<span class="br0">&#41;</span>
&nbsp;
	<span style="color: #0000ff;">def</span> save<span class="br0">&#40;</span>self, *args, **kwargs<span class="br0">&#41;</span>:
		self.slug = slugify<span class="br0">&#40;</span>self.titre<span class="br0">&#41;</span>
&nbsp;
		<span style="color: #808080;"># V&eacute;rifier si num&eacute;ro d'ordre d&eacute;j&agrave; pris</span>
		<span style="color: #0000ff;">print</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;ici&quot;</span><span class="br0">&#41;</span>
		previous=Chapitre.objects.all<span class="br0">&#40;</span><span class="br0">&#41;</span>
		final=len<span class="br0">&#40;</span>previous<span class="br0">&#41;</span>+<span style="color: #cc66cc;">1</span>
		<span style="color: #0000ff;">for</span> p <span style="color: #0000ff;">in</span> previous:
			<span style="color: #0000ff;">if</span> p.order == self.order:
				p.order=final
				super<span class="br0">&#40;</span>Chapitre, p<span class="br0">&#41;</span>.save<span class="br0">&#40;</span>*args, **kwargs<span class="br0">&#41;</span>
				<span style="color: #0000ff;">break</span>
			<span style="color: #808080;"># if</span>
		<span style="color: #0000ff;">else</span>: self.order=final
		super<span class="br0">&#40;</span><span class="br0">&#41;</span>.save<span class="br0">&#40;</span>*args, **kwargs<span class="br0">&#41;</span>
	<span style="color: #808080;"># save()</span>
<span style="color: #808080;"># class Chapitre</span></pre></td></tr></table></code><hr />
</div><br />
Et son homologue d'admin<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">@admin.register<span class="br0">&#40;</span>models.Chapitre<span class="br0">&#41;</span></span>
<span style="color: #0000ff;">class</span> Chapitre<span class="br0">&#40;</span>admin.ModelAdmin<span class="br0">&#41;</span>:
	list_display = <span class="br0">&#40;</span><span style="color: #FF0000;">'__str__'</span>, <span style="color: #FF0000;">'titre'</span>, <span style="color: #FF0000;">'order'</span>, <span style="color: #FF0000;">'description'</span><span class="br0">&#41;</span>
	list_editable = <span class="br0">&#40;</span><span style="color: #FF0000;">'titre'</span>, <span style="color: #FF0000;">'order'</span>, <span style="color: #FF0000;">'description'</span><span class="br0">&#41;</span>
	fields = <span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #FF0000;">'titre'</span>, <span style="color: #FF0000;">'order'</span><span class="br0">&#41;</span>, <span style="color: #FF0000;">'description'</span><span class="br0">&#41;</span>
	ordering = <span class="br0">&#40;</span><span style="color: #FF0000;">'order'</span>,<span class="br0">&#41;</span>
<span style="color: #808080;"># class Chapitre</span></pre></td></tr></table></code><hr />
</div><br />
Après peut-être que je pars dans un problèmeXY et dans ce cas merci de me recadrer. Mon idée c'est que si l'administrateur crée deux chapitres avec le même &quot;order&quot;, le premier chapitre créé parte à la fin (son order devient la valeur la plus élevée) tandis que le second chapitre le remplace dans la liste. C'est le but de la boucle placée dans le save() permettant de trouver un order déjà existant et si c'est le cas, le changer avant d'enregistrer le chapitre en cours.<br />
<br />
Merci de votre attention.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f926/autres-langages/python/reseau-web/django/">Django</category>
			<dc:creator>Sve@r</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179756/autres-langages/python/reseau-web/django/partie-admin-desactiver-controle-d-unicite/</guid>
		</item>
	</channel>
</rss>
