Note that there are some explanatory texts on larger screens.

plurals
  1. POIs there a way to auto-increment a Django field with respect to a foreign key?
    primarykey
    data
    text
    <p>I'm currently coding a site in Django (because you can never learn too many frameworks!), and am wondering if there's a way to auto-increment an object with respect to a related object. So for instance, say I have an Entry model and an EntryVersion model:</p> <p><strong>Entry</strong><br> - title<br> - slug</p> <p><strong>EntryVersion</strong><br> - entry (foreign key)<br> - version_number<br> - content</p> <p>I want to auto-increment <code>version_number</code> with respect to the entry foreign key (so that an entry might have several versions, starting at one and moving upwards by one). It won't be a true auto-increment, though, because it won't be unique in the database (there might be many entry versions with version_number = 1; just only one for a given Entry).</p> <p>I know that I could roll my own admin and just handle this there, but was wondering if there were any way to have the Django admin automatically increase the version number by one whenever a new entry version is saved.</p> <hr> <p><strong>Edit: specific code that I used (corrected to only set version number on first save)</strong></p> <p>Tiago's answer was right, but in the interest of future StackOverflow users with similar dilemmas, here's the specific code that I used:</p> <pre><code>def save(self, force_insert=False, force_update=False): # Only modify number if creating for the first time (is default 0) if self.version_number == 0: # Grab the highest current index (if it exists) try: recent = EntryVersion.objects.filter(entry__exact=self.entry).order_by('-version_number')[0] self.version_number = recent.version_number + 1 except IndexError: self.version_number = 1 # Call the "real" save() method super(EntryVersion, self).save(force_insert, force_update) </code></pre> <p>The <code>order_by</code> w/ index trick is one I gleaned from the Django documentation here:</p> <p><a href="http://docs.djangoproject.com/en/dev/topics/db/queries/#id4" rel="noreferrer">http://docs.djangoproject.com/en/dev/topics/db/queries/#id4</a></p> <p>Note that you must have <code>default=0</code> defined on your <code>version_number</code> field for this to work.</p> <p>There may be a better way, but this seems to be working exactly the way I needed; hopefully others will also find it useful.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload