1
我的模型如下:Django管理不更新,而不是插入
class Station(models.Model):
sid = models.IntegerField(primary_key=True)
uid = models.ForeignKey('User', db_column='uid', verbose_name='User')
name = models.CharField(max_length=100)
# and others...
class Meta:
managed = False
db_table = 'Stations'
class Playlist(models.Model):
plid = models.IntegerField(primary_key=True)
name = models.CharField(max_length=200)
changed = models.BooleanField(default = False)
def __unicode__(self):
return self.name
class Meta:
managed = False
db_table = 'Playlists'
class Stationplaylist(models.Model):
spid = models.IntegerField(primary_key=True, db_column='spid')
sid = models.ForeignKey(Station, db_column='sid')
plid = models.ForeignKey(Playlist, db_column='plid')
syncronized = models.BooleanField()
def __unicode__(self):
return self.plid.name
class Meta:
managed = False
db_table = 'StationsPlaylists'
unique_together=('sid', 'plid')
,我想在我看來執行插入操作:
def addPlaylist(request, app_label='webadmin', **kwargs):
# stuff...
selected_playlists = request.POST.getlist('selected_playlists[]')
current_station = request.POST.get('station')
totalPlaylists = Stationplaylist.objects.filter(sid=current_station).count()
last_spid = None
for playlist in selected_playlists:
if playlist != 'on':
if totalPlaylists==0:
last_spid=1
elif last_spid == None:
last_obj = Stationplaylist.objects.order_by('-pk')[0]
last_spid = last_obj.spid + 1
else:
last_spid += 1
Stationplaylist(last_spid, current_station, playlist, 0).save() # 0-syncronized
totalPlaylists+=1
return HttpResponse('OK')
,但是當我把這種對,說站#1,有3個播放列表,然後我在另一個播放列表上打電話給它,讓它成爲#2站,播放列表只是簡單地更新。我的意思是,在數據庫中,他們的電臺字段更新到電臺#2。
爲什麼會發生這種情況以及如何解決?
在此先感謝
我正在使用last_spid來模擬auto_increment。 感謝您的鏈接。 –
Yuck,我只注意到了代碼。請不要這樣做:你受到各種可怕的競賽條件的影響。 –
好吧,我將該字段更改爲AutoField,當我做 p = Playlistsong(current_playlist,song,totalSongs + 1) p.save() 服務器返回'內部錯誤'。 會導致什麼? –