| 1 |
from django.core import meta |
|---|
| 2 |
|
|---|
| 3 |
class Food(meta.Model): |
|---|
| 4 |
parent = meta.ForeignKey('self', blank=True, null=True, related_name='child') |
|---|
| 5 |
name = meta.CharField(maxlength=50) |
|---|
| 6 |
|
|---|
| 7 |
class META: |
|---|
| 8 |
ordering = ('name',) |
|---|
| 9 |
admin = meta.Admin( |
|---|
| 10 |
fields = ( |
|---|
| 11 |
(None, {'fields': ('name', 'parent',)}), |
|---|
| 12 |
), |
|---|
| 13 |
list_display = ('name',), |
|---|
| 14 |
search_fields = ['name',], |
|---|
| 15 |
) |
|---|
| 16 |
|
|---|
| 17 |
def __repr__(self): |
|---|
| 18 |
return self.name |
|---|
| 19 |
|
|---|
| 20 |
def get_all_children(self): |
|---|
| 21 |
output = [] |
|---|
| 22 |
children = self.get_child_list() |
|---|
| 23 |
for c in children: |
|---|
| 24 |
output.append(c) |
|---|
| 25 |
output = output + c.get_all_children() |
|---|
| 26 |
return output |
|---|
| 27 |
|
|---|
| 28 |
def get_all_parents(self): |
|---|
| 29 |
id_list = [] |
|---|
| 30 |
object = self |
|---|
| 31 |
while True: |
|---|
| 32 |
id_list.append(object) |
|---|
| 33 |
if not object.parent: |
|---|
| 34 |
break |
|---|
| 35 |
object = object.get_parent() |
|---|
| 36 |
id_list.reverse() |
|---|
| 37 |
return id_list |
|---|
| 38 |
|
|---|
| 39 |
class Restaurant(meta.Model): |
|---|
| 40 |
foods = meta.ManyToManyField(Food, filter_interface=meta.HORIZONTAL) |
|---|
| 41 |
last_modified = meta.DateTimeField(auto_now=True ) |
|---|
| 42 |
name = meta.CharField(maxlength=50) |
|---|
| 43 |
lat = meta.FloatField(max_digits=10, decimal_places=6) |
|---|
| 44 |
lng = meta.FloatField(max_digits=10, decimal_places=6) |
|---|
| 45 |
street = meta.CharField(maxlength=50) |
|---|
| 46 |
apt = meta.CharField( maxlength=10, blank=True) |
|---|
| 47 |
city = meta.CharField(maxlength=32) |
|---|
| 48 |
state = meta.USStateField(default='TX') |
|---|
| 49 |
zip = meta.PositiveIntegerField() |
|---|
| 50 |
phone = meta.PhoneNumberField(blank=True) |
|---|
| 51 |
image = meta.ImageField(upload_to='lunchbox/restaurants/images', blank=True, null=True) |
|---|
| 52 |
text = meta.TextField(blank=True, null=True) |
|---|
| 53 |
notes = meta.TextField(blank=True, null=True) |
|---|
| 54 |
|
|---|
| 55 |
class META: |
|---|
| 56 |
admin = meta.Admin( |
|---|
| 57 |
fields = ( |
|---|
| 58 |
(None, {'fields': ('name', 'foods', 'phone', 'image',)}), |
|---|
| 59 |
('Geocoding', {'fields': ('lat', 'lng',)}), |
|---|
| 60 |
('Address', {'fields': ('street', 'apt', 'city', 'state', 'zip',)}), |
|---|
| 61 |
(None, {'fields': ('text', 'notes',)}), |
|---|
| 62 |
), |
|---|
| 63 |
list_display = ('name', 'street', 'city', 'state', 'zip', 'has_image',), |
|---|
| 64 |
list_filter = ('city', 'state', 'zip',), |
|---|
| 65 |
ordering = ('name',), |
|---|
| 66 |
save_on_top = True, |
|---|
| 67 |
search_fields = ['name', 'street', 'city',], |
|---|
| 68 |
js = ( |
|---|
| 69 |
'http://localhost/tiny_mce/tiny_mce.js', |
|---|
| 70 |
'http://localhost/appmedia/admin/js/textareas.js', |
|---|
| 71 |
), |
|---|
| 72 |
) |
|---|
| 73 |
get_latest_by = 'last_modified' |
|---|
| 74 |
|
|---|
| 75 |
def __repr__(self): |
|---|
| 76 |
return self.name |
|---|
| 77 |
|
|---|
| 78 |
def has_image(self): |
|---|
| 79 |
if self.get_image_url(): |
|---|
| 80 |
return True |
|---|
| 81 |
return False |
|---|
| 82 |
has_image.short_description = 'image?' |
|---|
| 83 |
|
|---|
| 84 |
class Link(meta.Model): |
|---|
| 85 |
restaurant = meta.ForeignKey(Restaurant, edit_inline=meta.TABULAR, num_in_admin=2) |
|---|
| 86 |
url = meta.URLField (verify_exists=False, core=True) |
|---|
| 87 |
name = meta.CharField(maxlength=10, blank=True) |
|---|