from django.contrib.auth import get_user_model from django.db import models from django.forms import ModelForm from django import forms from captcha.fields import CaptchaField from random import randrange # Create your models here. User = get_user_model() class Author(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) def __str__(self): return f'{self.user.first_name} {self.user.last_name}' class Category(models.Model): class Meta: verbose_name_plural = 'Categories' title = models.CharField(max_length=20) subtitle = models.CharField(max_length=20) slug = models.SlugField() def __str__(self): return self.title class Post(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) slug = models.SlugField(blank=True, editable=False) overview = models.TextField(blank=True, editable=False) timestamp = models.DateTimeField(auto_now_add=True) content = models.TextField() categories = models.ManyToManyField(Category) featured = models.BooleanField() def __str__(self): return self.title def save(self, *args, **kwargs): self.overview = self.content[:33] + "..." if not self.slug: self.slug = self.title[:7].lower() + "-" + str(randrange(1000, 9999, 1)) super().save(*args, **kwargs) class Contact(models.Model): pseudonym = models.CharField(max_length=250) mail = models.EmailField(blank=True) betreff = models.CharField(max_length=500) nachricht = models.CharField(max_length=10000) timestamp = models.DateTimeField(auto_now_add=True) def __str__(self): return self.pseudonym class ContactForm(forms.ModelForm): captcha = CaptchaField() class Meta: model = Contact fields = ["pseudonym", "mail", "betreff", "nachricht", "captcha"] GESCHLECHTER = [("Männlich", "Männlich"), ("Weiblich","Weiblich"),("Andere","Andere")] ERNÄHRUNG = [("Vegetarisch","Vegetarisch"),("Vegan","Vegan"),("Glutenfrei","Glutenfrei")] class Registrant(models.Model): class Meta: abstract = True name = models.CharField(max_length=64,blank=True) mail = models.CharField(max_length=77,blank=True) phone = models.CharField(max_length=33,blank=True) rate_reduced = models.BooleanField() address_street = models.CharField(max_length=256,blank=True) address_plz = models.CharField(max_length=12,blank=True) address_town = models.CharField(max_length=33,blank=True) birthdate = models.CharField(max_length=33,blank=True) gender = models.CharField(max_length=33, blank=True, choices=GESCHLECHTER) food = models.CharField(max_length=33, blank=True, choices=ERNÄHRUNG) music = models.CharField(max_length=128,blank=True) cake = models.BooleanField() publish_address = models.BooleanField() publish_phone = models.BooleanField() info = models.CharField(max_length=777,blank=True) message = models.CharField(max_length=2100,blank=True) timestamp = models.DateTimeField(auto_now_add=True) payed = models.BooleanField(default=False) canceled = models.BooleanField(default=False) team = models.BooleanField(default=False) def __str__(self): return self.name class Registrant2024(Registrant): class Meta: verbose_name = 'Teilnehmer 2024' verbose_name_plural = 'Teilnehmer 2024' class Registrant2025(Registrant): class Meta: verbose_name = 'Teilnehmer 2025' verbose_name_plural = 'Teilnehmer 2025' class RegisterForm(ModelForm): class Meta: abstract = True captcha = CaptchaField() gender = forms.ChoiceField(widget=forms.RadioSelect,choices=GESCHLECHTER) food = forms.ChoiceField(widget=forms.RadioSelect,choices=ERNÄHRUNG) class RegisterForm2024(RegisterForm): class Meta: model = Registrant2024 fields = '__all__'