Как добавить несколько объектов внутри внешнего ключа в Django
Так что я пытался заставить мое представление django создавать модель автора как экземпляр, а затем сохранять несколько объектов внутри внешнего ключа. Есть идеи, как это сделать?
Я пробовал создать экземпляр автора, а затем установить атрибут tiktok экземпляра автора на новый экземпляр модели tiktok с указанием desc, likes и т.д. Это просто обновляет предыдущее значение, а не добавляет новый объект tiktok.
Models.py
from django.db import models
# Create your models here.
class TikTok(models.Model):
slug = models.SlugField(max_length=300, null=True)
desc = models.TextField(max_length=500, blank=True)
likes = models.CharField(default=None, blank=True, max_length=100)
shares = models.CharField(default=None, blank=True, max_length=100)
comments = models.CharField(default=None, blank=True, max_length=100)
plays = models.CharField(default=None, blank=True, max_length=100)
videoUrl = models.CharField(default=None, blank=True, null=True, max_length=500)
videoImg = models.CharField(default=None, blank=True, null=True, max_length=500)
music = models.CharField(default=None, blank=True, null=True, max_length=500)
def __str__(self):
return self.desc
class Author(models.Model):
userhandle = models.CharField(max_length=100, blank=True)
email = models.CharField(max_length=150, null=True, blank=True)
verified = models.BooleanField(null=True)
followers = models.IntegerField(default=0)
tiktoks = models.ForeignKey(TikTok, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return self.userhandle
А затем создать экземпляры в моих представлениях.
Другими словами, мне нужна одна модель автора и множество тиктоков, связанных с ней.
Вот как должен выглядеть вывод:
{
id: 1,
userhandle: 'user'
email: 'user@gmail.com'
verified: True
tiktoks: [
#multiple arrays of tiktoks
{
desc: 'desc1',
likes: 40,
...
},
{
desc: 'desc2',
likes: 40,
...
}
...
]
}
Любая помощь была бы признательна, спасибо.
Вы можете сделать это 3 способами
- Сделать поле TikTok много ко многим
- Создайте внешнюю таблицу для хранения автора и тиктока FK .
- Сделайте поле tiktok строковым и храните идентификаторы следующим образом
1,2,3
Сначала вы измените поле tiktok на это или похожее.
tiktoks = models.ManyToManyField(TikTok)
Супер базовый вид с использованием формы
def create_tiktok(request):
if request.method == 'POST':
authorObj = Author.objects.filter(pk=request.POST.get('pk')).first()
if authorObj:
form = TikTokForm(request.POST)
if form.is_valid():
o = form.save()
authorObj.tiktoks.add(o)
Пример Удалить
# format: model.field.action(obj)
authorObj.tiktoks.remove(TikTok.objects.get(pk=1))
Пример использования
authorObj = Author.objects.get(userhandle='Nealium')
# Looping through all
for i in authorObj.tiktoks.all():
print(i) # <TikTok Object>
# Fetching a specific
authorObj.tiktoks.filter(slug='test').first()
# Mass Adding
tiktokList = TikTok.objects.filter(slug__icontains='te')
authorObj.tiktoks.add(*tiktokList)
# Mass Remove
authorObj.tiktoks.add(*tiktokList)
# Clear entire field
authorObj.tiktoks.clear()