Bit of a lazyweb question here: anybody know how django-piston handles writes (create/update) to ManyToMany fields?
Go – Django-Piston: ManyToManyField handling
As pointed out in this answer, Django 1.9 added the Field.disabled attribute:
The disabled boolean argument, when set to True, disables a form field using the disabled HTML attribute so that it won’t be editable by users. Even if a user tampers with the field’s value submitted to the server, it will be ignored in favor of the value from the form’s initial data.
With Django 1.8 and earlier, to disable entry on the widget and prevent malicious POST hacks you must scrub the input in addition to setting the
readonly attribute on the form field:
class ItemForm(ModelForm): def __init__(self, *args, **kwargs): super(ItemForm, self).__init__(*args, **kwargs) instance = getattr(self, 'instance', None) if instance and instance.pk: self.fields['sku'].widget.attrs['readonly'] = True def clean_sku(self): instance = getattr(self, 'instance', None) if instance and instance.pk: return instance.sku else: return self.cleaned_data['sku']
if instance and instance.pk with another condition indicating you're editing. You could also set the attribute
disabled on the input field, instead of
clean_sku function will ensure that the
readonly value won't be overridden by a
Otherwise, there is no built-in Django form field which will render a value while rejecting bound input data. If this is what you desire, you should instead create a separate
ModelForm that excludes the uneditable field(s), and just print them inside your template.
One solution that I have employed is to do this:
1) Create a custom management command, e.g.
python manage.py my_cool_command
cron (on Linux) or
at (on Windows) to run my command at the required times.
This is a simple solution that doesn't require installing a heavy AMQP stack. However there are nice advantages to using something like Celery, mentioned in the other answers. In particular, with Celery it is nice to not have to spread your application logic out into crontab files. However the cron solution works quite nicely for a small to medium sized application and where you don't want a lot of external dependencies.
In later version of windows the
at command is deprecated for Windows 8, Server 2012 and above. You can use
schtasks.exe for same use.
**** UPDATE **** This the new link of django doc for writing the custom management command
It doesn't handle that. You need to explicitly override the "update" method for that.