I am trying to map a relationship between a gym model and its offer and events model. The idea is 1 gym can have many offers and many events. But 1 offer cannot belong to many gyms and 1 event cannot belong to many gyms. So, with the look of things, it is a one to Many relation. So far so good. This is my first time working with the Django ORM, so my approach might be a bit naive. I would like to essentially have tables in my db such as a table for gym, table for events and a table for offers. The offer and event table is connected to the gym through the gym id.How can i achieve that ? Because so far i see some pretty strange things in my Django admin page.This is what i tried so far
class Program(models.Model):
id = models.AutoField(primary_key=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=6, decimal_places=2)
class Meta:
ordering = ('last_updated',)
def __str__(self):
return "%s %s" % (self.id, self.price)
class Offer(models.Model):
id = models.AutoField(primary_key=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
name = models.CharField(max_length=100)
numberofsessions = models.CharField(max_length=100)
price = models.DecimalField(max_digits=6, decimal_places=2)
expireddate = models.DateTimeField(auto_now_add=True, editable=False)
class Meta:
ordering = ('last_updated',)
def __str__(self):
return "%s %s" % (self.id, self.expireddate)
class Event(models.Model):
id = models.AutoField(primary_key=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
name = models.CharField(max_length=100)
location = models.CharField(max_length=100)
price = models.DecimalField(max_digits=6, decimal_places=2)
eventdate = models.DateTimeField(auto_now_add=True, editable=False)
class Meta:
ordering = ('last_updated',)
def __str__(self):
return "%s %s" % (self.id, self.eventdate)
class User(models.Model):
id = models.AutoField(primary_key=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
name = models.CharField(max_length=100)
phonenumber = models.CharField(max_length=100)
amount = models.DecimalField(max_digits=6, decimal_places=2)
contact = models.CharField(max_length=100)
email = models.EmailField(max_length=70)
monthpaid = models.CharField(max_length=100)
class Meta:
ordering = ('last_updated',)
def __str__(self):
return "%s %s %s" % (self.id, self.phonenumber,self.monthpaid)
class Gym(models.Model):
# Fields
program = models.ForeignKey(Program)
event = models.ForeignKey(Event)
offer = models.ForeignKey(Offer)
event = models.ForeignKey(Event)
user = models.ForeignKey(User)
id = models.AutoField(primary_key=True)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
name = models.CharField(max_length=100)
email = models.CharField(max_length=100, null=True, blank=True)
phonenumber = models.CharField(max_length=100)
website = models.CharField(max_length=100, null=True, blank=True)
location = models.CharField(max_length=500)
zipcode = models.CharField(max_length=100, null=True, blank=True)
contactperson = models.CharField(max_length=100)
class Meta:
ordering = ('last_updated',)
def __str__(self):
return "%s %s" % (self.id, self.name)
admin.py
from django.contrib import admin
from .models import Gym, Event, Offer, Program, User
class Gyminline(admin.TabularInline):
model = Gym
class EventAdmin(admin.ModelAdmin):
inlines = (Gyminline,)
admin.site.register(Event, EventAdmin)
class OfferAdmin(admin.ModelAdmin):
inlines = (Gyminline,)
admin.site.register(Offer, OfferAdmin)
class ProgramAdmin(admin.ModelAdmin):
inlines = (Gyminline,)
admin.site.register(Program, ProgramAdmin)
class UserAdmin(admin.ModelAdmin):
inlines = (Gyminline,)
admin.site.register(User, UserAdmin)