Skip to content

Commit

Permalink
renamed everything from sublet to market, added app to installed_apps
Browse files Browse the repository at this point in the history
  • Loading branch information
minghansun1 committed Oct 25, 2024
1 parent 318db5c commit b76fc05
Show file tree
Hide file tree
Showing 9 changed files with 304 additions and 128 deletions.
14 changes: 8 additions & 6 deletions backend/market/admin.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
from django.contrib import admin
from django.utils.html import mark_safe

from market.models import Amenity, Offer, Sublet, SubletImage
from market.models import Tag, Category, Offer, Item, Sublet, ItemImage


class SubletAdmin(admin.ModelAdmin):
class ItemAdmin(admin.ModelAdmin):
def image_tag(self, instance):
images = ['<img src="%s" height="150" />' for image in instance.images.all()]
return mark_safe("<br>".join(images))

image_tag.short_description = "Sublet Images"
image_tag.short_description = "Item Images"
readonly_fields = ("image_tag",)


admin.site.register(Offer)
admin.site.register(Amenity)
admin.site.register(Sublet, SubletAdmin)
admin.site.register(SubletImage)
admin.site.register(Tag)
admin.site.register(Category)
admin.site.register(Item, ItemAdmin)
admin.site.register(Sublet)
admin.site.register(ItemImage)
168 changes: 168 additions & 0 deletions backend/market/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
# Generated by Django 5.0.2 on 2024-10-25 16:41

import django.db.models.deletion
import phonenumber_field.modelfields
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name="Category",
fields=[
("name", models.CharField(max_length=50, primary_key=True, serialize=False)),
],
),
migrations.CreateModel(
name="Tag",
fields=[
("name", models.CharField(max_length=255, primary_key=True, serialize=False)),
],
),
migrations.CreateModel(
name="Item",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("title", models.CharField(max_length=255)),
("description", models.TextField(blank=True, null=True)),
("external_link", models.URLField(blank=True, max_length=255, null=True)),
("price", models.IntegerField()),
("negotiable", models.BooleanField(default=True)),
("used", models.BooleanField(blank=True, null=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
("expires_at", models.DateTimeField()),
(
"category",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="items",
to="market.category",
),
),
(
"favorites",
models.ManyToManyField(
blank=True, related_name="items_favorited", to=settings.AUTH_USER_MODEL
),
),
(
"seller",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
),
),
],
),
migrations.CreateModel(
name="ItemImage",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("image", models.ImageField(upload_to="marketplace/images")),
(
"item",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="images",
to="market.item",
),
),
],
),
migrations.CreateModel(
name="Offer",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("email", models.EmailField(blank=True, max_length=255, null=True)),
(
"phone_number",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, null=True, region=None
),
),
("message", models.CharField(blank=True, max_length=255)),
("created_date", models.DateTimeField(auto_now_add=True)),
(
"item",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="offers",
to="market.item",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="offers_made_market",
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.AddField(
model_name="item",
name="buyers",
field=models.ManyToManyField(
blank=True,
related_name="items_offered",
through="market.Offer",
to=settings.AUTH_USER_MODEL,
),
),
migrations.CreateModel(
name="Sublet",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("address", models.CharField(max_length=255)),
("beds", models.IntegerField()),
("baths", models.IntegerField()),
("start_date", models.DateTimeField()),
("end_date", models.DateTimeField()),
(
"item",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE,
related_name="sublet",
to="market.item",
),
),
],
),
migrations.AddField(
model_name="item",
name="tags",
field=models.ManyToManyField(blank=True, related_name="items", to="market.tag"),
),
migrations.AddConstraint(
model_name="offer",
constraint=models.UniqueConstraint(fields=("user", "item"), name="unique_offer_market"),
),
]
10 changes: 3 additions & 7 deletions backend/market/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

class Offer(models.Model):
class Meta:
constraints = [models.UniqueConstraint(fields=["user", "item"], name="unique_offer")]
constraints = [models.UniqueConstraint(fields=["user", "item"], name="unique_offer_market")]

user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="offers_made")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="offers_made_market")
item = models.ForeignKey("Item", on_delete=models.CASCADE, related_name="offers")
email = models.EmailField(max_length=255, null=True, blank=True)
phone_number = PhoneNumberField(null=True, blank=True)
Expand Down Expand Up @@ -59,11 +59,7 @@ class Item(models.Model):
User, through=Offer, related_name="items_offered", blank=True
)
tags = models.ManyToManyField(Tag, related_name="items", blank=True)
category = models.CharField(
max_length=50,
choices=Category.choices,
default=Category.OTHER,
)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="items")
favorites = models.ManyToManyField(User, related_name="items_favorited", blank=True)

title = models.CharField(max_length=255)
Expand Down
2 changes: 1 addition & 1 deletion backend/market/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def has_permission(self, request, view):

def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
# Check if the user owns the sublet when getting list
# Check if the user owns the item when getting list
return obj.seller == request.user
# This is redundant, here for safety
return obj.user == request.user
Loading

0 comments on commit b76fc05

Please sign in to comment.