1
내 모델의 업데이트는 다음과 같다 수행합니다장고 관리자 대신 삽입
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로 업데이트된다는 것입니다.
왜 그런 일이 일어나고 어떻게 해결할 수 있습니까?
미리 감사
auto_increment를 시뮬레이트하기 위해 last_spid를 사용하고 있습니다. 링크를 제공해 주셔서 감사합니다. –
Yuck, 방금 그 코드를 발견했습니다. 제발하지 마세요. 당신은 모든 종류의 끔찍한 경쟁 조건에 처해 있습니다. –
좋아, 내가 필드를 AutoField로 바꿨을 때 p = Playlistsong (current_playlist, song, totalSongs + 1) p.save() 서버가 '내부 오류'를 반환합니다. 그 원인은 무엇입니까? –