basic models

This commit is contained in:
zman 2023-11-30 15:14:47 -05:00
parent 4e5b5e6416
commit 9635af599f
9 changed files with 272 additions and 20 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
.venv .venv
__pycache__ __pycache__
db.sqlite3

Binary file not shown.

View File

@ -0,0 +1,93 @@
# Generated by Django 4.2.7 on 2023-11-30 20:12
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Game',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
],
options={
'verbose_name': 'Game',
'verbose_name_plural': 'Games',
},
),
migrations.CreateModel(
name='Guild',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('tag', models.CharField(max_length=10)),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
],
options={
'verbose_name': 'Guild',
'verbose_name_plural': 'Guilds',
},
),
migrations.CreateModel(
name='Player',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='players', to='server.guild')),
],
options={
'verbose_name': 'Player',
'verbose_name_plural': 'Players',
},
),
migrations.CreateModel(
name='PlayerGameProfile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='player_profiles', to='server.game')),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='game_profiles', to='server.player')),
],
options={
'verbose_name': 'Player Game Profile',
'verbose_name_plural': 'Player Game Profiles',
},
),
migrations.CreateModel(
name='WowProfile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('level', models.IntegerField()),
('class_name', models.CharField(max_length=200)),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
('player_game_profile', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='wow_profile', to='server.playergameprofile')),
],
options={
'verbose_name': 'WoW Profile',
'verbose_name_plural': 'WoW Profiles',
},
),
migrations.CreateModel(
name='ValorantProfile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rank', models.CharField(max_length=200)),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
('player_game_profile', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='valorant_profile', to='server.playergameprofile')),
],
options={
'verbose_name': 'Valorant Profile',
'verbose_name_plural': 'Valorant Profiles',
},
),
]

View File

87
server/server/models.py Normal file
View File

@ -0,0 +1,87 @@
from django.db import models
class Guild(models.Model):
name = models.CharField(max_length=200)
tag = models.CharField(max_length=10)
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return f"{self.name} [{self.tag}]"
class Meta:
verbose_name = "Guild"
verbose_name_plural = "Guilds"
class Player(models.Model):
name = models.CharField(max_length=200)
guild = models.ForeignKey(Guild, on_delete=models.CASCADE, related_name="players")
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return self.name
class Meta:
verbose_name = "Player"
verbose_name_plural = "Players"
class Game(models.Model):
name = models.CharField(max_length=200)
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return self.name
class Meta:
verbose_name = "Game"
verbose_name_plural = "Games"
class PlayerGameProfile(models.Model):
player = models.ForeignKey(
Player, on_delete=models.CASCADE, related_name="game_profiles"
)
game = models.ForeignKey(
Game, on_delete=models.CASCADE, related_name="player_profiles"
)
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return f"{self.player} - {self.game}"
class Meta:
verbose_name = "Player Game Profile"
verbose_name_plural = "Player Game Profiles"
class WowProfile(models.Model):
player_game_profile = models.OneToOneField(
PlayerGameProfile, on_delete=models.CASCADE, related_name="wow_profile"
)
level = models.IntegerField()
class_name = models.CharField(max_length=200)
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return f"{self.player_game_profile.player} - {self.player_game_profile.game}"
class Meta:
verbose_name = "WoW Profile"
verbose_name_plural = "WoW Profiles"
class ValorantProfile(models.Model):
player_game_profile = models.OneToOneField(
PlayerGameProfile, on_delete=models.CASCADE, related_name="valorant_profile"
)
rank = models.CharField(max_length=200)
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return f"{self.player_game_profile.player} - {self.player_game_profile.game}"
class Meta:
verbose_name = "Valorant Profile"
verbose_name_plural = "Valorant Profiles"

View File

@ -0,0 +1,44 @@
from rest_framework import serializers
from .models import Guild, Player, Game, PlayerGameProfile, WowProfile, ValorantProfile
class GuildSerializer(serializers.ModelSerializer):
class Meta:
model = Guild
fields = ["id", "name", "tag", "creation_date"]
read_only_fields = ["id", "creation_date"]
class PlayerSerializer(serializers.ModelSerializer):
class Meta:
model = Player
fields = ["id", "name", "guild", "creation_date"]
read_only_fields = ["id", "creation_date"]
class GameSerializer(serializers.ModelSerializer):
class Meta:
model = Game
fields = ["id", "name", "creation_date"]
read_only_fields = ["id", "creation_date"]
class PlayerGameProfileSerializer(serializers.ModelSerializer):
class Meta:
model = PlayerGameProfile
fields = ["id", "player", "game", "creation_date"]
read_only_fields = ["id", "creation_date"]
class WowProfileSerializer(serializers.ModelSerializer):
class Meta:
model = WowProfile
fields = ["id", "player_game_profile", "level", "class_name", "creation_date"]
read_only_fields = ["id", "creation_date"]
class ValorantProfileSerializer(serializers.ModelSerializer):
class Meta:
model = ValorantProfile
fields = ["id", "player_game_profile", "rank", "creation_date"]
read_only_fields = ["id", "creation_date"]

View File

@ -37,6 +37,8 @@ INSTALLED_APPS = [
"django.contrib.sessions", "django.contrib.sessions",
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"rest_framework",
"server",
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -1,24 +1,16 @@
""" from django.urls import path, include
URL configuration for server project. from rest_framework.routers import DefaultRouter
from .views import GameViewSet, GuildViewSet, PlayerViewSet, PlayerGameProfileViewSet, WowProfileViewSet, ValorantProfileViewSet, hello_world
The `urlpatterns` list routes URLs to views. For more information please see: router = DefaultRouter()
https://docs.djangoproject.com/en/4.2/topics/http/urls/ router.register(r'games', GameViewSet)
Examples: router.register(r'guilds', GuildViewSet)
Function views router.register(r'players', PlayerViewSet)
1. Add an import: from my_app import views router.register(r'player-game-profiles', PlayerGameProfileViewSet)
2. Add a URL to urlpatterns: path('', views.home, name='home') router.register(r'wow-profiles', WowProfileViewSet)
Class-based views router.register(r'valorant-profiles', ValorantProfileViewSet)
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from .views import hello_world
urlpatterns = [ urlpatterns = [
path('', hello_world), path('', hello_world, name='index'),
path("admin/", admin.site.urls), path('', include(router.urls)),
] ]

View File

@ -1,5 +1,38 @@
from django.http import HttpResponse from django.http import HttpResponse
from rest_framework import viewsets
from .models import Game, Guild, Player, PlayerGameProfile, WowProfile, ValorantProfile
from .serializers import GameSerializer, GuildSerializer, PlayerSerializer, PlayerGameProfileSerializer, WowProfileSerializer, ValorantProfileSerializer
def hello_world(request): def hello_world(request):
return HttpResponse("Hello, World!") return HttpResponse("Hello, World!")
class GameViewSet(viewsets.ModelViewSet):
queryset = Game.objects.all()
serializer_class = GameSerializer
class GuildViewSet(viewsets.ModelViewSet):
queryset = Guild.objects.all()
serializer_class = GuildSerializer
class PlayerViewSet(viewsets.ModelViewSet):
queryset = Player.objects.all()
serializer_class = PlayerSerializer
class PlayerGameProfileViewSet(viewsets.ModelViewSet):
queryset = PlayerGameProfile.objects.all()
serializer_class = PlayerGameProfileSerializer
class WowProfileViewSet(viewsets.ModelViewSet):
queryset = WowProfile.objects.all()
serializer_class = WowProfileSerializer
class ValorantProfileViewSet(viewsets.ModelViewSet):
queryset = ValorantProfile.objects.all()
serializer_class = ValorantProfileSerializer