Простой способ работы с моделями Django?
Проблема
Я пытаюсь создать множество функций в своем проекте, которые позволят мне легко создавать, удалять и изменять данные с помощью Model.objects.function()
, но я только что узнал, что вы не можете получить доступ к 'manager' через экземпляры: AttributeError: Manager isn't accessible via Address instances
.
У меня была функция для преобразования строки модели в реальную модель, например if model == 'author: return Author
, чтобы я мог использовать их в качестве входов для других функций, но, похоже, это не работает
Я тоже не могу ввести классы в функции, поэтому я не уверен, как решить эту проблему.
Любая помощь будет очень признательна.
Context
Я пытаюсь создать эти функции как команды в myproj/management/commands
.
В настоящее время код выглядит следующим образом:
myproj/management/commands/insert_random_data.py
from django.core.management.base import BaseCommand, CommandError
from ._private import *
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('model', type=str)
def handle(self, *args, **options):
model = options['model']
if model == "all":
ad = format_data("address", generate_data("address"))
ra = format_data("rating", generate_data("rating"))
.
.
.
myproj/management/commands/_private.py
from myproj.models import *
import string
import random
def string_to_model(string):
string = string.lower()
if string == "author":
model = Author
elif string == "seller":
model = Seller
elif string == "address":
model = Address
elif string == "rating":
model = Rating
elif string == "product":
model = Product
elif string == "edition":
model = Edition
elif string == "tag":
model = Tag
elif string == "taglisting":
model = TagListing
elif string == "booklisting":
model = BookListing
elif string == "picture":
model = Picture
else:
return ValueError
return model
def format_data(model, d, foreignkey1=None, foreignkey2=None):
model = string_to_model(model)
if d is not None:
if foreignkey1 != None:
if foreignkey2 != None:
return model(*d, foreignkey1, foreignkey2).objects
return model(*d, foreignkey1).objects
else:
return model(*d).objects
else:
if foreignkey1 != None:
if foreignkey2 != None:
return model(foreignkey1, foreignkey2).objects
return model(foreignkey1).objects
else:
return model.objects
genereate_data() просто возвращает список, содержащий данные для ввода в поле.