我尝试使用post语句创建Klient,但不是在DB中创建新行,而是替换最新的行。
我的观点是从一个POST创建两个模型。最终代码应检查是否存在Klient版本,如果是,则仅创建预订。
型号:
class Klient(models.Model):
namn = models.CharField(max_length=124)
adress = models.CharField(max_length=124)
kontakt = models.CharField(max_length=124)
class KlientForm(ModelForm):
class Meta:
model = Klient
fields = ['namn', 'adress', 'kontakt']
class Bokning(models.Model):
klient = models.ForeignKey('Klient', on_delete=models.CASCADE)
referens = models.IntegerField(null=True, blank=True)
pumpStr = models.IntegerField(null=True, blank=True)
slangStr = models.IntegerField(null=True, blank=True)
pump = models.IntegerField(null=True, blank=True)
maskinist = models.CharField(max_length=124, blank=True)
betongLev = models.CharField(max_length=124, blank=True)
betongKvalite = models.CharField(max_length=124, blank=True)
bestalld = models.IntegerField(null=True, blank=True)
pumpMng = models.IntegerField()
datum = models.DateField()
littNr = models.IntegerField()
arbNr = models.IntegerField(null=True, blank=True)
resTid = models.IntegerField()
grundavgift = models.IntegerField()
pumpStart = models.DateTimeField()
pumpSlut = models.DateTimeField()
ovrigInfo = models.CharField(max_length=124, blank=True
class BokningForm(ModelForm):
class Meta:
model = Bokning
fields = [
'referens',
'pumpStr',
'slangStr',
'pump',
'maskinist',
'betongLev',
'betongKvalite',
'bestalld',
'pumpMng',
'datum',
'littNr',
'arbNr',
'resTid',
'grundavgift',
'pumpStart',
'pumpSlut',
'ovrigInfo']
查看:
def bokning(request):
if request.method == 'POST':
klientForm = KlientForm(json.loads(request.body.decode()))
bokningForm = BokningForm(json.loads(request.body.decode()))
if klientForm.is_valid() and bokningForm.is_valid():
klient = klientForm.save()
bokning = bokningForm.save(commit=False)
bokning.klient = klient
bokning.save()
return HttpResponse(status=201)
else:
return HttpResponse(status=400)
else:
return HttpResponseNotAllowed(['POST'])
尝试连续创建多个Boking或Klient会导致创建最新版本的更新版本。除了测试断言之外,它不会产生任何错误。
感谢。
答案 0 :(得分:0)
我的问题出现在我的测试中,而不是我的观点。我喜欢发送POST请求的两个测试,比如
def test_postBokning(self):
response = self.client.post('/api/bokning/', json.dumps('a bunch of json'}), content_type='application/json')
#assertions
def test_postBokningCopy(self):
response = self.client.post('/api/bokning/', json.dumps('a bunch of json'}), content_type='application/json')
#assertions
我将最后一个POST移到第一个测试中,这样就删除了我的问题。