我有两个模型,分别是 Task
和 Batch
,它们通过外键字段相互关联。创建 Task Object
时,我想先检查 Batch Object
是否在数据库中可用(批处理只是当前日期,因此我可以使用批处理对每个任务进行分组)。如果没有,则创建一个 Batch 对象,然后将新创建的 Batch 对象传递给正在创建的 Task。
问题是,当我保存数据时,出现错误:
(index):328 POST http://localhost:8000/api/task-create/ 500 (Internal Server Error)
views.py
@api_view(['POST'])
def taskCreate(request):
batch = Batch.objects.filter(batch = datetime.date.today()).first()
serializer = TaskSerializer(data=request.data)
if serializer.is_valid():
serializer.save(commit=False)
if batch is None :
batch = Batch.objects.create(batch = datetime.date.today())
serializer.batch = batch
serializer.save()
return Response(serializer.data)
models.py
class Batch(models.Model):
batch = models.DateField(auto_now_add=True)
class Meta:
ordering = ['-batch']
verbose_name = 'Batch'
verbose_name_plural = 'Batches'
def __str__(self):
return self.batch.strftime("%B %d, %Y %A")
class Task(models.Model):
title = models.CharField(
max_length = 256,
)
completed = models.BooleanField(
default = False,
)
batch = models.ForeignKey(Batch, on_delete=models.CASCADE)
def __str__(self):
return self.title
serializers.py
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = '__all__'
depth = 1
这就是我在前端处理表单的方式:
var form = document.getElementById("form")
form.addEventListener('submit', function(e){
e.preventDefault()
var url = "{% url 'api:task-create' %}"
if(activeItem != null ){
url = `http://localhost:8000/api/task-update/${activeItem.id}/`
activeItem = null
}
var title = document.getElementById('title').value
fetch(url, {
method: 'POST',
headers:{
'Content-type': 'application/json',
'X-CSRFToken': csrftoken,
},
body: JSON.stringify({'title':title})
}).then(function(response){
renderList()
document.getElementById('form').reset()
})
})
答案 0 :(得分:0)
更新:自己找到了答案
views.py
@api_view(['POST'])
def taskCreate(request):
check_batch = Batch.objects.filter(batch = datetime.date.today()).first()
if check_batch is None:
check_batch = Batch.objects.create(batch = datetime.date.today())
serializer = TaskSerializer(data=request.data)
if serializer.is_valid():
serializer.save(batch = check_batch)
return Response(serializer.data)
我使用以下方法访问香草 js 上的前键数据:
${taskList[task].batch.batch}