Do properties work on Django model fields?
django, model, properties, python
Solution
A model field is already property, so I would say you have to do it the second way to avoid a name clash.
When you define `foo = property(..)` it actually overrides the `foo = models..` line, so that field will no longer be accessible.
You will need to use a different name for the property and the field. In fact, if you do it the way you have it in example #1 you will get an infinite loop when you try and access the property as it now tries to return itself.
EDIT: Perhaps you should also consider not using `_foo` as a field name, but rather `foo`, and then define another name for your property because properties cannot be used in `QuerySet`, so you'll need to use the actual field names when you do a filter for example.
Problem
I think the best way to ask this question is with some code... can I do this: ``` class MyModel(models.Model): foo = models.CharField(max_length = 20) bar = models.CharField(max_length = 20) def get_foo(self): if self.bar: return self.bar else: return self.foo def set_foo(self, input): self.foo = input foo = property(get_foo, set_foo) ``` or do I have to do it like this: ``` class MyModel(models.Model): _foo = models.CharField(max_length = 20, db_column='foo') bar = models.CharField(max_length = 20) def get_foo(self): if self.bar: return self.bar else: return self._foo def set_foo(self, input): self._foo = input foo = property(get_foo, set_foo) ``` note: you can keep the column name as 'foo' in the database by passing a db_column to the model field. This is very helpful when you are working on an existing system and you don't want to have to do db migrations for no reason