Muffin
Muffin

Reputation: 113

How to create a Djano ModelForm and a view that handles a Foreign key relationship

I have a model which consists of fk's to other models.

class ParkingSpace(models.Model):
    name = models.CharField(max_length=50, blank=False)
    description = models.TextField(blank=False)
    image = models.ImageField(null=True, upload_to="images/parking_spaces")
    price = models.ForeignKey('Price', on_delete=models.CASCADE, null=True, blank=False)
    opening_hours = models.ForeignKey('OpeningHours', on_delete=models.CASCADE, null=True, blank=False)
    location = models.OneToOneField('Location', on_delete=models.CASCADE, null=True, blank=False)
    size = models.ForeignKey('Size', on_delete=models.CASCADE, null=True, blank=False)
    type = models.ForeignKey('Type', on_delete=models.CASCADE, null=True, blank=False)
    features = models.ManyToManyField('Features', blank=False, db_table='ParkingSpaceFeatures')
    reviews = models.ManyToManyField('Review', blank=False, db_table='ParkingSpaceReviews')
    contact_information = models.ForeignKey('ContactInformation', on_delete=models.CASCADE, null=True, blank=False)
    seller_account = models.ForeignKey('Account', on_delete=models.CASCADE, null=True, blank=False)

Let me use the opening hours as an example:

class OpeningHours(models.Model):

    # Opening and closing times of every day in the week
    monday_open = models.TimeField(null=True,blank=False)
    monday_close = models.TimeField(null=True,blank=False)

    tuesday_open = models.TimeField(null=True,blank=False)
    tuesday_close = models.TimeField(null=True,blank=False)

    wednesday_open = models.TimeField(null=True,blank=False)
    wednesday_close = models.TimeField(null=True,blank=False)

    thursday_open = models.TimeField(null=True,blank=False)
    thursday_close = models.TimeField(null=True,blank=False)

    friday_open = models.TimeField(null=True,blank=False)
    friday_close = models.TimeField(null=True,blank=False)

    saturday_open = models.TimeField(null=True,blank=False)
    saturday_close = models.TimeField(null=True,blank=False)

    sunday_open = models.TimeField(null=True,blank=False)
    sunday_close = models.TimeField(null=True,blank=False)

Now I want to create a form where the user will be able to enter the information to create a parking space. For fields in parking space like price,opening_hours, location and contact_information these models have multiple fields that data needs to be inputted in a form.

Is there a way that Django has that can handle all the database saving process so that if for example a price object is already in the database the parking space price field will be given the number of the price object with such data. Instead of creating multiple forms then saving instances to a parking space, as this creates duplication in the database.

How can I create such a form?

Upvotes: 0

Views: 31

Answers (0)

Related Questions