Я хочу создать собственную авторскую модель с помощью django, но я не могу этого сделать :(

#python #django #django-models #backend #web-frameworks

Вопрос:

Я пытаюсь создать новостной сайт с помощью django, и в структуре данных шаблона, которую я получил на интерфейсе, есть специальная страница сведений об авторе. В бэкэнде мне нужно преобразовать эту авторскую часть в API и интегрировать ее на сайт, но код, который я написал, работает неправильно (я могу добавить одного автора, но когда я пытаюсь добавить второго, я получаю УНИКАЛЬНОЕ ограничение failed post_author.ошибка href.) Как, по-вашему, я должен следовать и какую структуру я должен создать?

Это мой код модели

 from django.db import models from django.contrib.contenttypes.models import ContentType from django.db import models from django.urls import reverse #from comments.models import Comment from .utils import get_read_time from django.conf import settings from django.utils import timezone from markdown_deux import markdown from django.utils.text import slugify from django.contrib.auth.models import User from django.db.models.signals import pre_save from django.utils.safestring import mark_safe import uuid # from user_info.models import Profile   class GENDER(models.TextChoices):   Erkek = "Erkek"  Kadın = "Kadın"  Diğer = "Diğer"  NONE = "Belirtmek İstemiyorum"   class Category_Choices(models.TextChoices):  BİLİNMEYENLER = '13İlinmeyenler'  KİŞİSEL_GELİŞİM = 'Kişisel Gelişim'  İLHAM_AL = 'İlham Al'  YATIRIM_HABERLERİ = 'Yatırım Haberleri'  GİRİŞİMCİLİK = 'Girişimcilik'  ENGLİSH_NEWS = 'English News'  BAŞARI_HİKAYELERİ = "Başarı Hikayeleri"   class Color_Choices(models.TextChoices):  INDIGO = 'indigo'  green = 'green'  yellow = 'yellow'  RED = 'red'  blue = 'blue'  gray = 'gray'  pink = "pink"    class Author(models.Model):   author = models.OneToOneField(User, on_delete = models.CASCADE)  firstName = models.CharField(max_length=80)  lastName = models.CharField(max_length=80)  email = models.EmailField(null=True,blank=True)  displayName = models.CharField(max_length=100)  href = models.SlugField(editable=False,unique=True)  gender = models.TextField(blank=False,choices=GENDER.choices)  avatar = models.ImageField(upload_to="avatar")  desc = models.TextField()  jobName = models.CharField(default="Yazar",max_length=30)  bgImage = models.ImageField(null=True, blank=True, upload_to="background")   def __str__(self):  return self.displayName   def get_slug(self):  href = slugify(self.firstName.replace("ı","i"))  unique = href  number = 1   while Author.objects.filter(href=unique).exists():  unique = "{}-{}" .format(href,number)  number  = 1   return unique   def pre_save_receiver(sender, instance, *args, **kwargs):  if not instance.href and instance.firstName:  if not Author.objects.filter(href=slugify(instance.firstName)).exists():  instance.href = slugify(instance.firstName)  else:  instance.href = slugify(instance.firstName)   str(uuid.uuid4())[:8]  class Categories(models.Model):   name = models.CharField(max_length=50,choices=Category_Choices.choices,default=Category_Choices.BİLİNMEYENLER)  color = models.CharField(max_length=30,choices=Color_Choices.choices, default=Color_Choices.RED)  href = models.SlugField(editable=False)  thumbnail = models.ImageField(upload_to="postpost",null=True,blank=True)   def __str__(self):  return self.name   def get_category_slug(self):  slug = slugify(self.name.replace("ı","i"))  unique = slug  number = 1   while Categories.objects.filter(slug=unique).exists():  unique = "{}-{}" .format(slug,number)  number  = 1   return unique  def save(self, *args, **kwargs):  self.href = slugify(self.name)  super(Categories,self).save(*args, **kwargs)   def get_absolute_url(self):  return self.href  class Post(models.Model):   authorId = models.ForeignKey(Author, on_delete=models.CASCADE)  title = models.CharField(max_length=255, unique=True)  desc = models.CharField(max_length=255)  categoryID = models.ForeignKey(Categories,on_delete=models.CASCADE,)  content = models.TextField(blank=False)  href = models.SlugField(editable=False,unique=True)  draft = models.BooleanField(default=True)  readingtime = models.IntegerField(default=0)  updated = models.DateTimeField()  date = models.DateTimeField(editable=False,null=True)  published = models.DateField(default=timezone.now)  featuredimage = models.ImageField(null=True, blank=True, upload_to='post')      class Meta:  ordering = ['-date', '-updated']   def __str__(self):  return self.title   def get_slug(self):  slug = slugify(self.title.replace("ı","i"))  unique = slug  number = 1   while Post.objects.filter(slug=unique).exists():  unique = "{}-{}" .format(slug,number)  number  = 1   return unique  #@property  #def comments(self):  # instance = self  # qs = Comment.objects.filter_by_instance(instance)  # return qs    def get_markdown(self):  content = self.content  markdown_text = markdown(content)  return mark_safe(markdown_text)   def pre_save_receiver(sender, instance, *args, **kwargs):  if not instance.href and instance.title:  if not Post.objects.filter(href=slugify(instance.title)).exists():  instance.href = slugify(instance.title)  else:  instance.href = slugify(instance.title)   str(uuid.uuid4())[:8]  def pre_save_receiver(sender, instance, *args, **kwargs):  if not instance.href and instance.firstName:  if not Author.objects.filter(href=slugify(instance.firstName)).exists():  instance.href = slugify(instance.firstName)  else:  instance.href = slugify(instance.firstName)   str(uuid.uuid4())[:8]    pre_save.connect(pre_save_receiver, sender=Post) pre_save.connect(pre_save_receiver, sender=Author)  

и это json-версия структуры таблицы, которую я хочу создать

 {  "id": 4,  "firstName": "Aşkın Nur",  "lastName": "Ersoy",  "displayName": "Aşkın Nur Ersoy",  "email": "afalconar3@google.ru",  "gender": "Non-binary",  "avatar": "https://robohash.org/corruptiliberolabore.png?size=150x150amp;set=set1",  "count": 36,  "href": "/author/the-demo-author-slug",  "desc": "There’s no stopping the tech giant. Apple now opens its 100th store in China.There’s no stopping the tech giant.",  "jobName": "Author Job",  "bgImage": "https://images.pexels.com/photos/4064835/pexels-photo-4064835.jpeg?auto=compressamp;cs=tinysrgbamp;dpr=2amp;h=750amp;w=1260" },  

Комментарии:

1. В вашей модели , которая у вас есть href = models.SlugField(editable=False,unique=True) , это означает, что href она будет отличаться для всех объектов. Но в ваших данных json вы "href": "/author/the-demo-author-slug" уверены, что это значение уникально для всех данных ?

2. Я создам сайт с подробной страницей для каждого из сообщений и подробной страницей для каждого из авторов. Шаблон, который я купил, в настоящее время заполнен только статическим демонстрационным контентом, и вместо этого я создам структуру, создав динамические ссылки в этом разделе href. И да, я уверен, что это уникальная ценность.

3. Я создам сайт с подробной страницей для каждого из сообщений и подробной страницей для каждого из авторов. Шаблон, который я купил, в настоящее время заполнен только статическим демонстрационным контентом, и вместо этого я создам структуру, создав динамические ссылки в этом разделе href. И да, я уверен, что это уникальная ценность.