使用**kwargs/a字符串填充django taggit字段
我有一个自定义命令,用JSON数据填充Django对象,该数据的工作方式基本上符合我的要求,但Django taggit字段有一个问题。解析我的所有数据并以JSON输出后,我的JSON对象中的类型如下所示:使用**kwargs/a字符串填充django taggit字段,django,django-taggit,Django,Django Taggit,我有一个自定义命令,用JSON数据填充Django对象,该数据的工作方式基本上符合我的要求,但Django taggit字段有一个问题。解析我的所有数据并以JSON输出后,我的JSON对象中的类型如下所示: "genres": "latin pop, pop, singer-songwriter", django taggit采用逗号分隔的标记列表,就是这样。但是当我运行下面的自定义命令时,模型中的genres=TaggableManager()字段中没有任何内容 import json i
"genres": "latin pop, pop, singer-songwriter",
django taggit采用逗号分隔的标记列表,就是这样。但是当我运行下面的自定义命令时,模型中的genres=TaggableManager()
字段中没有任何内容
import json
import dateparser
from django.db import IntegrityError
from django.core.management.base import BaseCommand, CommandError
from concerts.models import Concert, Venue
class Command(BaseCommand):
help = "Load JSON concert data"
def add_arguments(self, parser):
parser.add_argument('concert_file', type=str)
def handle(self, *args, **options):
with open(options['concert_file']) as f:
data = json.load(f)
for concert in data:
try:
venue = Venue.objects.get(name=concert['venue'])
except Venue.DoesNotExist:
print "Can't find venue! " + concert['venue']
pass
del concert['venue']
try:
Concert.objects.create(venue=venue, **concert)
except IntegrityError:
print concert['slug'] + ": This concert already exists!"
pass
# if the slug unique contrainst fails, just pass this concert
如何让“类型”字段以我想要的方式填充?以下是我在其他人遇到此问题时得出的结论:
class Command(BaseCommand):
help = "Load JSON concert data"
def add_arguments(self, parser):
parser.add_argument('concert_file', type=str)
def handle(self, *args, **options):
with open(options['concert_file']) as f:
data = json.load(f)
for concert in data:
try:
venue = Venue.objects.get(name=concert['venue'])
except Venue.DoesNotExist:
print "Can't find venue! " + concert['venue']
pass
del concert['venue']
try:
Concert.objects.create(venue=venue, **concert)
print concert['slug'] + ": Concert created!"
except IntegrityError: # if slug already exists
print concert['slug'] + ": This slug already exists!"
pass
# if the slug unique contrainst fails, just pass this concert
try:
new_concert = Concert.objects.get(slug=concert['slug'])
genres = concert['genres'].split(", ")
for genre in genres:
new_concert.genres.add(genre)
except KeyError or AttributeError: # if no genres key exists
pass
正如你所料,答案就在文件中。我查看了django taggit文档,特别是API上的文档,然后在上面的try/except语句中添加了标准标记
(对我来说)这段代码的一个好处是,即使音乐会已经存在,这段代码仍然会更新“流派”字段