在 Django 中填充数据库并检索视图中的值会因为外键而出错?
Populating a database in django and retrieving the values in the view gives error becaue of ForeignKey?
我正在使用脚本在django中填充模型数据库,但由于foreignKey关系似乎有问题。
填充脚本似乎工作正常,但在我尝试访问该页面后出现错误:
Exception Type: DoesNotExist
Exception Value: Week matching query does not exist.
填充脚本:
def add_week(week):
w = Week.objects.get_or_create(date=week)
return w
def add_song(name, artist, position, week):
s = week.song_set.get_or_create(name=name, artist=artist, position=position)
return s
this_week = (add_week(week=soup.time.text))[0]
for position, (song_name, artist) in enumerate(chart):
print "%d. %s - %s" % (position+1, song_name, artist)
add_song(name=song_name, artist=artist, position=position+1, week=this_week)
型号:
from django.db import models
class Week(models.Model):
date = models.CharField(max_length=50)
def __unicode__(self):
return self.date
class Song(models.Model):
week = models.ForeignKey(Week, default=1)
name = models.CharField(max_length=300)
artist = models.CharField(max_length=300)
position = models.SmallIntegerField()
difference = models.SmallIntegerField(default=0)
def __unicode__(self):
return self.name
查看:
from django.shortcuts import render
from charts.models import Song, Week
# Create your views here.
def chart(request):
songs = Song.objects.order_by('position')
week = Week.objects.get(pk=1) #here comes the error, even though I see two weeks in admin view
def changed_since_last_week(request):
week = Week.objects.get(pk=5)
last_week = Week.objects.get(pk=6)
songs = Song.objects.filter(week=week).order_by('position')
songs_last_week = Song.objects.filter(week=last_week)
context_dict = {'songs_last_week': songs}
for song in songs:
song_last= Song.objects.all().filter(name=song.name)
if song_last:
song.objects.difference = song_last.position - song.position
return render(request, 'charts/change.html', context_dict)
如果你在admin视图中查看url,数据库中这两周的主键真的是1(和2)吗?如果您多次测试生成脚本(或者之前可能使用过数据库),这两条记录可能恰好具有 1(或 2)以外的其他主键。
此外,如果您想要特定的记录,您可以按模型的每个字段进行查询,例如Week.objects.get(date='my_hardcoded_date')
。 (顺便说一下,我猜 date
中的值是自定义的,所以你不能使用 Django 的原生 DateField
或 DateTimeField
之一)。
我正在使用脚本在django中填充模型数据库,但由于foreignKey关系似乎有问题。
填充脚本似乎工作正常,但在我尝试访问该页面后出现错误:
Exception Type: DoesNotExist
Exception Value: Week matching query does not exist.
填充脚本:
def add_week(week):
w = Week.objects.get_or_create(date=week)
return w
def add_song(name, artist, position, week):
s = week.song_set.get_or_create(name=name, artist=artist, position=position)
return s
this_week = (add_week(week=soup.time.text))[0]
for position, (song_name, artist) in enumerate(chart):
print "%d. %s - %s" % (position+1, song_name, artist)
add_song(name=song_name, artist=artist, position=position+1, week=this_week)
型号:
from django.db import models
class Week(models.Model):
date = models.CharField(max_length=50)
def __unicode__(self):
return self.date
class Song(models.Model):
week = models.ForeignKey(Week, default=1)
name = models.CharField(max_length=300)
artist = models.CharField(max_length=300)
position = models.SmallIntegerField()
difference = models.SmallIntegerField(default=0)
def __unicode__(self):
return self.name
查看:
from django.shortcuts import render
from charts.models import Song, Week
# Create your views here.
def chart(request):
songs = Song.objects.order_by('position')
week = Week.objects.get(pk=1) #here comes the error, even though I see two weeks in admin view
def changed_since_last_week(request):
week = Week.objects.get(pk=5)
last_week = Week.objects.get(pk=6)
songs = Song.objects.filter(week=week).order_by('position')
songs_last_week = Song.objects.filter(week=last_week)
context_dict = {'songs_last_week': songs}
for song in songs:
song_last= Song.objects.all().filter(name=song.name)
if song_last:
song.objects.difference = song_last.position - song.position
return render(request, 'charts/change.html', context_dict)
如果你在admin视图中查看url,数据库中这两周的主键真的是1(和2)吗?如果您多次测试生成脚本(或者之前可能使用过数据库),这两条记录可能恰好具有 1(或 2)以外的其他主键。
此外,如果您想要特定的记录,您可以按模型的每个字段进行查询,例如Week.objects.get(date='my_hardcoded_date')
。 (顺便说一下,我猜 date
中的值是自定义的,所以你不能使用 Django 的原生 DateField
或 DateTimeField
之一)。